Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 嵌套PFQuery';HandleWatchKitExtensionRequest中的s_Ios_Swift_Parse Platform_Watchkit - Fatal编程技术网

Ios 嵌套PFQuery';HandleWatchKitExtensionRequest中的s

Ios 嵌套PFQuery';HandleWatchKitExtensionRequest中的s,ios,swift,parse-platform,watchkit,Ios,Swift,Parse Platform,Watchkit,我正在尝试嵌套2 PFQuery的内部HandleWatchKitExtensionRequest,以便在回复中将数据传递回我的Watch扩展。在下面的代码中,第一个查询(针对与给定用户名匹配的PFUser)返回,但我无法获取第二个查询(针对用户的人员列表)返回。在同一块中进行多个查询是否有一些限制?在这个长时间运行的请求返回之前,我的后台任务是否超时 *我编辑了我的代码,因此名称列表不是可选的,但仍然没有返回值。而同一个块(嵌套的findObjectsInBackGroundBlocks)在我

我正在尝试嵌套2 PFQuery的内部HandleWatchKitExtensionRequest,以便在回复中将数据传递回我的Watch扩展。在下面的代码中,第一个查询(针对与给定用户名匹配的PFUser)返回,但我无法获取第二个查询(针对用户的人员列表)返回。在同一块中进行多个查询是否有一些限制?在这个长时间运行的请求返回之前,我的后台任务是否超时

*我编辑了我的代码,因此名称列表不是可选的,但仍然没有返回值。而同一个块(嵌套的findObjectsInBackGroundBlocks)在我的IOS应用程序中执行并完美返回

延长后台任务的延迟时间没有帮助

 func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {


    var dictionary = userInfo! as NSDictionary


    if let currentUserName: AnyObject = dictionary.objectForKey("currentUserName") {
        if let currentUserNameAsString = currentUserName as? String {


            // Bogus task for keeping app going
            var bogusTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { () -> Void in
            }
            // End bogus task after 2 seconds
            delay(2.0, closure: { () -> () in
                UIApplication.sharedApplication().endBackgroundTask(bogusTask)
            })

            // look up current user logged in on phone from name passed from Watch
            let query = PFUser.query()
            query!.whereKey("username", equalTo: currentUserNameAsString)
            query!.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

                if let user = objects?.first as? PFUser {

                    var testName: String?
                    var nameList:  String = []
                    let query = PFQuery(className: Person.parseClassName())
                    query.whereKey("user", equalTo: user)

                    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
                        if let people = objects as? [Person] {
                            for person in people {
                                if let name = person.name {
                                nameList.append(name)
                                    testName = nameList.first
                                }
                            }
                        }
                        testName = ("test")
                    }






                let testDict = ["success" : testName!]
                reply(testDict)

                 UIApplication.sharedApplication().endBackgroundTask(bogusTask) // End the bogusTask in case the work was faster than 2 seconds
                    }
                }


                }

            }




}

// Utility function for delay
func delay(delay:Double, closure:()->()) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(),
        closure
    )
}

看起来您正在嵌套查询之外调用“reply(testDict)”


由于查询是异步的,“reply(testDict)”可能在嵌套查询完成执行之前被调用

你为什么要在两个不同的地方结束你的背景任务?您在开始后台任务的闭包中结束它,闭包中没有任何其他内容,因此该代码实际上什么也不做。谢谢,我用更好的后台任务解决方案更新了我的问题,但仍然存在相同的问题,即我可以返回第一个查询,但不能返回第二个查询?您希望它返回什么,实际结果是什么?我知道查询是正确的,因为它们在我的IOS应用程序中是相同的…第二个查询应该返回一组人…但在我的测试代码中,我只是测试第二个FindObject是否正在执行。你有没有在没有后台任务的情况下尝试过,看看它是否会被执行?很简单,但你绝对正确!!嗯。。。谢谢你,PJ!