首页 文章

UICollectionView不重新加载数据

提问于
浏览
0

我试图在我的应用程序中使用Parse实现搜索功能,并希望使用重新加载数据来排序PFObjects . 我的应用程序可以第一次执行reloadData(),但在第一次之后返回“在展开Optional值时意外发现nil” . 我已经尝试在mainThread中执行reloadData并删除我的collectionView中的弱引用,但它仍然无效 . 我在下面附上了我的代码 . 先感谢您!

@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")

}

2 回答

  • 0

    如果你在这一行得到错误......

    self.collectionView.reloadData()
    

    ..然后自我或集合视图可能是零 . 要检查这一点,只需在此行上放置一个断点并检查哪个是nil - self或collectionView . 如果您不知道如何在调试器中设置断点和检查值,那么请搜索教程 - 这很容易,但需要在此解释 . 如果你想继续编程,你将不得不学习这一点 .

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

  • 0

    也许原因在于:

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

    userInfo是一个可选值,你确定它不是零值吗?

    找到原因的最好方法是启用Exception Breakpoint,然后我们将获得更多崩溃信息来帮助我们解决它 .

相关问题