UICollectionView 不重新加载数据
Posted
技术标签:
【中文标题】UICollectionView 不重新加载数据【英文标题】:UICollectionView does not reloadData 【发布时间】:2015-08-15 13:53:21 【问题描述】:我正在尝试在我的使用 Parse 的应用程序中实现搜索功能,并希望使用重新加载数据对 PFObjects 进行排序。我的应用程序可以第一次执行 reloadData(),但它在第一次之后返回“在展开可选值时意外发现 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")
【问题讨论】:
哪个引用意外为零? @AaronBrager 我不知道如何找到哪个引用意外为零。使用此代码,self.collectionView.reloadData() 以绿色突出显示,并发生错误。 把postObject = object
改成postObject = object!
@DDPWNAGE 当我尝试这样做时,Xcode 显示错误“后缀的操作数'!'应该有可选类型;类型是 '[PFObject]'"
@Emily 好的。在其中添加 if (object == nil)
语句。
【参考方案1】:
如果您在此行收到错误...
self.collectionView.reloadData()
.. 那么 self 或 collectionView 都可以为 nil。要检查这一点,只需在这一行上放置一个断点并检查哪个是 nil - self 或 collectionView。如果您不知道如何在调试器中设置断点和检查值,请搜索教程 - 这很简单,但在这里需要解释很多。如果您想继续编程,无论如何都必须学习这一点。
并且:从 collectionView 中删除“弱”是一个坏主意,因为它可能导致引用循环和内存泄漏。
【讨论】:
【参考方案2】:也许原因就在这里:
println("Error: \(error!) \(error!.userInfo!)")
userInfo 是一个可选值,你确定它不是一个 nil 值吗?
找到原因的最好方法是开启异常断点,然后我们会得到更多的崩溃信息来帮助我们解决它。
【讨论】:
以上是关于UICollectionView 不重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 在重新加载数据时滚动不平滑
如何在 UICollectionView 中加载更多数据而不重新加载所有数据
iOS 9 UICollectionView 水平重新加载数据不起作用
在单元格文本字段的 textFieldShouldEndEditing 方法中调用 UICollectionView 重新加载数据不起作用