arrays - 在 Swift 中,如何在 PFQueryTableViewController 上执行一个查询先于另一个查询?

标签 arrays swift parse-platform

我正在尝试在我的 PFQueryTableViewController 中对 Parse 执行两个查询。我正在尝试执行一个查询以获取与 currentUser 相关的所有对象,然后将这些对象放入一个数组中。在数组填满它的对象后,我想从

做另一个查询
override func queryForTable() -> PFQuery { }. 

第二个查询将使用第一个查询创建的数组中的对象,以检索它自己的对象。

我不知道如何让第一个查询在第二个之前执行。截至目前,第二个查询将在第一个查询之前执行,然后它才有机会填充数组,结果会弄乱对第二个查询的查询。以下是我目前的代码。

class PFNewsFeedTableViewController: PFQueryTableViewController {

var leadersArray : NSMutableArray = NSMutableArray()

override func viewDidAppear(animated: Bool) {
    leadersArray.removeAllObjects()

    var findLeaders = PFQuery(className: "Follow")

    findLeaders.whereKey("follower", equalTo: PFUser.currentUser()!)
    findLeaders.orderByDescending("createdAt")
    findLeaders.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        //If no error
        if error == nil {

            println("Successfully retrieved \(objects!.count) leaders.")

            // Do something with the found objects
            if let objects = objects as? [PFObject] {

                for object in objects {

                    self.leadersArray.addObject(object.objectForKey("leader")!)

                }

            }

        }
        self.tableView.reloadData()

        self.queryForTable()
    }

}



override func queryForTable() -> PFQuery {

    var findContent = PFQuery(className: "Content")
    findContent.whereKey("user", containedIn: self.leadersArray as [AnyObject])
    findContent.orderByDescending("createdAt")

    return findContent
}    

}   

有没有办法确定这些查询的执行顺序?对此问题的任何帮助将不胜感激。

最佳答案

是的,你可以。

首先让我说,听起来您确实应该尝试重新考虑您的数据模型,因为像这样连续执行两个查询通常是过度关注传统数据建模而不是更实用的 nosql 的标志- 您(尤其是移动应用程序)应该针对查询而不是规范化建模的建模风格。

如果你要像你说的那样解决你的案子,你可以使用 Bolts framework .无需安装它,因为它已经作为 Parse 的一部分安装(它在幕后使用 Bolts)。

它可能看起来像这样(只是一个快速的记录。可能无法开箱即用,但您应该能够使其适合):

var findLeaders = PFQuery(className: "Follow")
findLeaders.whereKey("follower", equalTo: PFUser.currentUser()!)
findLeaders.orderByDescending("createdAt")
findLeaders.findObjectsInBackground().continueWithBlock {
    (task: BFTask!) -> AnyObject! in

    //If no error
    if task.error != nil {
        print("Something went wrong...")
    } else {
        // Do something with the found objects
        if let objects = task.result as? [PFObject] {
            print("Successfully retrieved \(objects.count) leaders.")

            for object in objects {
                self.leadersArray.addObject(object.objectForKey("leader")!)
            }
        }
    }
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })
    self.queryForTable()
    return nil
}

关于arrays - 在 Swift 中,如何在 PFQueryTableViewController 上执行一个查询先于另一个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161271/

相关文章:

javascript - 总结对象中的所有属性

c++ - C/C++ ASCII 字符到 HEX BYTE 数组

ios - 在 Cocoa Touch Framework 中包装静态库

ios - 原生 iOS 国家/地区选择器

ios - 解析 IOS 查询,返回给定键的匹配值,其中值包含在数组中

ios - 如果缺少字段,则解析注册到下一个 View Controller

python - numpy 数组形状更改/扩展

arrays - 动态规划 : Number of moves to reduce the array to 1 number

swift - 堆数据结构实现swift

javascript - 如何删除 parse.com 中的特定行?