删除隐藏视图/子视图以解冻主视图

时间:2015-08-09 11:48:38

标签: swift

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()

    }
}

1 个答案:

答案 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()
    }
}