Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift:异步加载函数_Ios_Swift_Asynchronous_Parse Platform_Closures - Fatal编程技术网

Ios swift:异步加载函数

Ios swift:异步加载函数,ios,swift,asynchronous,parse-platform,closures,Ios,Swift,Asynchronous,Parse Platform,Closures,经过10年的编码禁欲,我实际上是在尝试一个“回来”,通过在swift中开发一个小应用程序,使用解析作为后端。 到目前为止,它运行得相当顺利,但从几天以来,我就卡住了!我希望这里有人能帮助我 我在TableViewController中编写了两个方法,用于从解析后端和本地数据存储加载数据: //get data from local Datastore func fetchAllObjectsFromLocalDatastore() { let query: PFQuery = P

经过10年的编码禁欲,我实际上是在尝试一个“回来”,通过在swift中开发一个小应用程序,使用解析作为后端。 到目前为止,它运行得相当顺利,但从几天以来,我就卡住了!我希望这里有人能帮助我

我在TableViewController中编写了两个方法,用于从解析后端和本地数据存储加载数据:

    //get data from local Datastore
func fetchAllObjectsFromLocalDatastore() {
    let query: PFQuery = PFQuery(className: "Task")

    query.fromLocalDatastore()

    query.whereKey("delete", equalTo: false)


    query.findObjectsInBackground().continueWithBlock {
        (task: BFTask!) -> AnyObject in
        if let error = task.error {
            print("Error: \(error)")
            return task
        }
        //LOG
        print("Retrieved \(task.result.count)")

        let objects = task.result as? NSArray
        self.taskObjects = objects?.mutableCopy() as! NSMutableArray
        dispatch_async(dispatch_get_main_queue(), {
            self.tableView.reloadData()
        })
        return task
    }
}

//get data from parse and cach it locally
func fetchAllObjects() {

    let query: PFQuery = PFQuery(className: "Task")

    print(PFUser.currentUser()?.username) //log
    query.whereKey("done", equalTo: false)
    // Query for new results from the network
    query.findObjectsInBackground().continueWithSuccessBlock({
        (task: BFTask!) -> AnyObject! in
        print("Retrieved \(task.result.count)")

        return PFObject.unpinAllObjectsInBackground().continueWithSuccessBlock({
            (ignored: BFTask!) -> AnyObject! in
            // Cache new results in local data store
            let objects = task.result as? NSArray
            let temp : BFTask = PFObject.pinAllInBackground(objects as? [AnyObject], withName: "Task")
            self.fetchAllObjectsFromLocalDatastore()
            return temp
        })
    })

}
这两种方法运行良好,但现在我想将应用程序改进为更像MVC架构,并添加一些新功能。因此,我试着把它们分为一个单独的类。现在我的问题来了:当我上一次用C开发线程时,线程变得非常流行,所以我第一次打算做异步任务。Nur当我重新研究地形时,我总是阅读块和闭包。在我的理解中(不知道它是否正确),我必须编写异步callbak来实现这一点,对吗

我尝试了不同的东西,比如这里展示的,但没有真正起作用。 这里是我的最后一个方法:

func fetchAllObjects(completion: (update:Bool?)->()) {
    print("CallParse")
    var update = false
    let query: PFQuery = PFQuery(className: "Task")

    print(PFUser.currentUser()?.username) //log
    query.whereKey("done", equalTo: false)
    // Query for new results from the network

    query.findObjectsInBackground().continueWithSuccessBlock({
    (task: BFTask!) -> AnyObject! in
        print("Retrieved \(task.result.count)")

        return PFObject.unpinAllObjectsInBackground().continueWithSuccessBlock({
        (ignored: BFTask!) -> AnyObject! in
            // Cache new results
            let objects = task.result as? NSArray
            let temp : BFTask = PFObject.pinAllInBackground(objects as? [AnyObject], withName: "Task")
            //self.fetchAllObjectsFromLocalDatastore()
            update = true
            return temp
        })
    //TODO: correct update
    })
}
电话:

 tasklist.fetchAllObjects({(update) -> () in
                print("lalalalal")
                if (update==true) {
                    dispatch_async(dispatch_get_main_queue(), {
                       self.tableView.reloadData()
                    })
                }
            })

。。但它从不打印拉拉或更新表格视图

我看不到您使用
完成
关闭。嗯,我不明白。你是什么意思?你在
func fetchAllObjects(completion:(update:Bool?)->(){
上定义了一个
completion
闭包,但从未使用过它我不太懂Swift,但是你在一个正在执行后台提取的函数中定义了
let query:PFQuery
。当函数超出范围时,这个对象会发生什么?