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