UICollectionView 不重新加载数据
UICollectionView does not reloadData
我正在尝试在我的应用程序中实现搜索功能,该应用程序使用 Parse 并希望使用重新加载数据对 PFObjects 进行排序。我的应用程序可以第一次执行 reloadData(),但它 returns "unexpectedly found nil while unwrapping an Optional value" 是在第一次之后。我已经尝试在 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")
}
可能原因就在这里:
println("Error: \(error!) \(error!.userInfo!)")
userInfo 是可选值,您确定它不是 nil 值吗?
查找原因的最好方法是启用异常断点,然后我们将获得更多的崩溃信息来帮助我们解决它。
如果您在这一行遇到错误...
self.collectionView.reloadData()
.. 那么 self 或 collectionView 可能为零。要检查这一点,只需在此行上放置一个断点并检查哪个为 nil - self 或 collectionView。如果您不知道如何在调试器中设置断点和检查值,请搜索教程 - 这很简单,但这里要解释的太多了。如果你想继续编程,无论如何你都必须学习这个。
并且:从 collectionView 中删除 "weak" 是个坏主意,因为它可能导致引用循环和内存泄漏。
我正在尝试在我的应用程序中实现搜索功能,该应用程序使用 Parse 并希望使用重新加载数据对 PFObjects 进行排序。我的应用程序可以第一次执行 reloadData(),但它 returns "unexpectedly found nil while unwrapping an Optional value" 是在第一次之后。我已经尝试在 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")
}
可能原因就在这里:
println("Error: \(error!) \(error!.userInfo!)")
userInfo 是可选值,您确定它不是 nil 值吗?
查找原因的最好方法是启用异常断点,然后我们将获得更多的崩溃信息来帮助我们解决它。
如果您在这一行遇到错误...
self.collectionView.reloadData()
.. 那么 self 或 collectionView 可能为零。要检查这一点,只需在此行上放置一个断点并检查哪个为 nil - self 或 collectionView。如果您不知道如何在调试器中设置断点和检查值,请搜索教程 - 这很简单,但这里要解释的太多了。如果你想继续编程,无论如何你都必须学习这个。
并且:从 collectionView 中删除 "weak" 是个坏主意,因为它可能导致引用循环和内存泄漏。