2016-03-17 3 views
0

Я пытаюсь реализовать загрузку данных с сервера Parse после нажатия кнопки на postVC для загрузки данных и перехода к гостевому элементу. Он работал нормально и в какой-то момент начал крушить приложение ... не знаете почему? Я получаю фатальную ошибку: неожиданно нашел нуль, разворачивая необязательное значение ... Приветствуется всякое руководство или помощь. Благодаря!неожиданно нашел нуль при развертывании необязательного значения dispatch-async

import UIKit 
import Parse 

var postuuid = [String]() 

class postVC: UITableViewController { 

//postVC button click function 
//clicked username button from post 
    @IBAction func usernameBtn_click(sender: AnyObject) { 
     let i = sender.layer.valueForKey("index") as! NSIndexPath 
     let cell = tableView.cellForRowAtIndexPath(i) as! postCell 

     // if user tapped on himself go home, else go guest 
     if cell.usernameBtn.titleLabel?.text == PFUser.currentUser()?.username { 
      let home = self.storyboard?.instantiateViewControllerWithIdentifier("homeVC") as! homeVC 
      self.navigationController?.pushViewController(home, animated: true)  
     } else { 
      let guest = self.storyboard?.instantiateViewControllerWithIdentifier("guestVC") as! guestVC 
      self.navigationController?.pushViewController(guest, animated: true) 
     } 
    } 



// guestVC relevant code 
import UIKit 
import Parse 

var guestname = [String]() 

class guestVC: UICollectionViewController { 

    var uuidArray = [String]() 
    var picArray = [PFFile]() 

    // posts loading function 
    func loadPosts() {  

      let query = PFQuery(className: "posts") 
// app keeps crashing in line below when I try to load data to guestVC 
      query.whereKey("username", equalTo: guestname.last!) 
      query.limit = self.page 
      query.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error:NSError?) -> Void in 

       if error == nil { 

        self.uuidArray.removeAll(keepCapacity: false) 
        self.picArray.removeAll(keepCapacity: false) 

        for object in objects! { 
         self.uuidArray.append(object.valueForKey("uuid") as! String) 
         self.picArray.append(object.valueForKey("pic") as! PFFile) 
        } 

        self.collectionView?.reloadData() 
       } else { 
        print(error!.localizedDescription) 
       } 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 

        // code here will be executed as the main queue 

       }) 
      }) 

    } 

ответ

0

Вы используете много восклицательных знаков, чтобы принудительно развернуть необязательные значения в вашем коде, это плохая привычка. Например, вы можете разворачивать guestname.last безопасно:

guard let lastItem = guestname.last else { 
// do something else 
return 
} 
query.whereKey("username", equalTo: lastItem) 
+0

Ok, спасибо. Итак, что мне вернуть в инструкции else? У меня есть несколько экземпляров, получающих ошибки, когда я возвращаю запрос, используя guestname.last, когда вы переходите к гостевой версии. – user3708224

+0

Приложение вылетает из-за того, что имя guest.las равно nil (имя guest пусто), но вы пытаетесь развернуть его. В противном случае вы можете обрабатывать случай, когда guestname пусто (возможно, отображает ошибку в представлении предупреждения) –

0

Перед добавлением или добавлением, ключ словаря имеет действительное значение или нет. Убедитесь, что ключ «uuid» или «pic» имеет значение в словаре или нет. Если он добавляет/добавляет.

Смежные вопросы