2015-08-15 16 views
0

我想在我的应用程序中使用解析并实现搜索功能,并希望使用重载数据对PFObjects进行排序。我的应用程序可以首次执行reloadData(),但它在第一次之后返回“意外地发现零,同时展开可选值”。我已经尝试在mainThread中执行reloadData并删除我的collectionView中的弱引用,但它仍然不起作用。我附上了我的代码。先谢谢你!UICollectionView不重装数据

@IBOutlet var collectionView: UICollectionView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    loadCollectionViewData() 
} 

//This method is also conducted when the user taps search button 
func loadCollectionViewData(){ 
    let ud = NSUserDefaults.standardUserDefaults() 

    var query = PFQuery(className: "Posts") 


    if ud.objectForKey("searchKeyFromVCKey") != nil{ 
     //This is keyword the user puts in 
     var searchKey = ud.objectForKey("searchKeyFromVCKey") as! String 
     println("searchKey \(searchKey)") 

     if searchKey != "" { 
      //If a user is searching something... 
      query.whereKey("searchTag", containsString: searchKey.lowercaseString) 
     }} 

    query.findObjectsInBackgroundWithBlock { 
     (objects: [AnyObject]?, error: NSError?) -> Void in 


     if error == nil { 

      postObject.removeAll(keepCapacity: false) 

      if let object = objects as? [PFObject] { 
       postObject = object 


      } 

      self.collectionView.reloadData() //This works the first time when I conduct loadCollectionViewData() in ViewDidLoad 

     } else { 
      // Log details of the failure 
      println("Error: \(error!) \(error!.userInfo!)") 


     } 

    } 
    ud.removeObjectForKey("searchKeyFromVCKey") 

} 
+0

哪个引用意外地为零? –

+0

@AaronBrager我不知道如何找到哪个引用是意外的零。通过此代码,self.collectionView.reloadData()以绿色高亮显示,并发生错误。 – Emily

+0

将'postObject = object'改为'postObject = object!' – DDPWNAGE

回答

0

如果你在该行的错误...

self.collectionView.reloadData() 

..然后要么的CollectionView可能是零。要检查这一点,只需在这一行放置一个断点并检查哪一个是零 - 无论是self还是collectionView。如果你不知道如何在调试器中设置断点和检查值,那么请搜索教程 - 这很容易,但要在这里解释很多。无论如何,如果你想继续编程,你将不得不学习这一点。

并且:从collectionView中删除“弱”是一个坏主意,因为它可能导致引用循环和内存泄漏。

0

也许原因就在这里:

println("Error: \(error!) \(error!.userInfo!)") 

USERINFO是一个可选值,是ü确保它不是一个零值?

找到原因的最佳方法是启用异常断点,然后我们将获得更多的崩溃信息来帮助我们解决它。