我正在尝试从父应用程序接收一个对象数组(从应用程序中的Parse中检索),以便在监视应用程序中显示。我一直在尝试一些不同的事情但没有成功。
以下是扩展程序中的代码:
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
var parkPassed = context as! String
openParentAppWithPark(parkPassed)
}
private func openParentAppWithPark(park: String) {
WKInterfaceController.openParentApplication(["request": park], reply: { (reply, error) -> Void in
println(reply)
})
}
父应用中的代码:
func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {
println("Test")
if let userInfo = userInfo, request = userInfo["request"] as? NSArray {
if request == "Park 1" {
DataManager.sharedInstance.loadRides("Park 1")
} else if request == "Park 2" {
DataManager.sharedInstance.loadRides("Park 2")
} else if request == "Park 3" {
DataManager.sharedInstance.loadRides("Park 3")
} else {
DataManager.sharedInstance.loadRides("Park 4")
}
let rides = DataManager.sharedInstance.rideArray
println("Rides: \(rides)")
reply(["rideData": rides])
return
}
reply([:])
}
println
我第一次尝试加载时总是返回nil
,然后每隔一次[:]
。我假设这是因为请求在应用程序有时间从Parse加载数据之前超时?此外,永远不会调用打印“Test”的println
。
答案 0 :(得分:3)
在扩展程序中,您通过String
密钥将park
(request
)传递给父应用程序,但在父应用程序中,您正在测试是否{{ 1}}是userInfo["request"]
或不是NSArray
。您应该测试String
,如:
if let userInfo = userInfo, request = userInfo["request"] as? String {
答案 1 :(得分:0)
首先将一个后台任务断言添加到openParentCall,你可以在这里找到更多的上下文:Background Task Watchkit
let backgroundTask = application.beginBackgroundTaskWithExpirationHandler { NSLog("TIME UP")}
///do code
reply(callback)
//
application.endBackgroundTask(backgroundId)
现在对于实际的handleWatchKitExtensionRequest调用,我会将第一行更改为
if let request = userInfo["request"] as? String {
现在,对于println(" Test"),如果您没有附加到使用parentApplication进行处理,则不会打印到控制台,然后println将不会注销。 如果乘坐数据返回空,那么我将检查此功能:
DataManager.sharedInstance.loadRides(ride: String)
确保它实际上返回了您需要的正确数据。附加到进程并在每个case上放置一个断点并检查是否正在调用其中一个case并跳转到loadRides函数以确保它从它返回。作为旁注,您在回复块中发回的信息必须是属性列表,否则回复块将始终失败。