https://github.com/leoru/SwiftLoader 我在我的应用程序中使用此活动指示器库,但在我将SwiftLoader.hide()调用到无法与任何内容交互的地方后,它冻结了我的主要UICollectionView。我的iOS设备本身并没有冻结,因为我可以很好地执行所有其他功能,而我的调试器并没有抱怨什么。只是在调用一个方法后我的UICollectionView不是交互式的。我知道这个库是问题,因为它永远不会冻结,除非我使用它。此外,通过查看库的代码,它涉及添加UIViews /子视图以及删除或解除它们。我怀疑某些事情没有被正确删除或解雇。有人可以证实我的怀疑吗?下面是我正在使用的唯一一个涉及一个名为SwiftLoader的库的代码。如果我将SwiftLoader函数取出,它可以完美地工作而不会冻结。
func queryPostObjectsWithLocation(loci: CLLocation) {
SwiftLoader.show(title: "Loading...", animated: true)
let postQuery = PFQuery(className: "Post")
let postsNearThisUser = postQuery.whereKey("location", nearGeoPoint:PFGeoPoint(location: loci),withinMiles: miles)
let whiteList = postQuery.whereKey("objectId", notContainedIn: self.flaggedPosts)
let combo = PFQuery.orQueryWithSubqueries([postsNearThisUser,whiteList])
combo.limit = 20
combo.findObjectsInBackgroundWithBlock {(result: [AnyObject]?, error: NSError?) -> Void in
self.posts = result as? [PFObject] ?? []
if self.posts == [] {
SwiftLoader.hide()
}
self.collectionView.reloadData()
SwiftLoader.hide()
}
}
答案 0 :(得分:0)
尝试在主线程上执行您的代码,如下所示:
combo.findObjectsInBackgroundWithBlock {(result: [AnyObject]?, error: NSError?) -> Void in {
self.posts = result as? [PFObject] ?? []
NSOperationQueue.mainQueue().addOperationWithBlock {
if self.posts == [] {
SwiftLoader.hide()
}
self.collectionView.reloadData()
SwiftLoader.hide()
}
}