没有数组从父应用程序发送到Watch应用程序
我试图从父应用程序接收一系列对象(从应用程序中的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
从不会被调用。
在扩展中,通过request
键将一个String
( park
)传递给父应用程序,但在父应用程序中,您正在测试userInfo["request"]
是否为NSArray
。 您应该测试一个String
,如下所示:
if let userInfo = userInfo, request = userInfo["request"] as? String {
首先添加一个后台任务断言到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不会打印到控制台,那么println将不会注销。 如果乘坐数据返回空,那么我会检查这个函数:
DataManager.sharedInstance.loadRides(ride: String)
确保它实际上返回了你需要的正确数据。 附加处理并在每个案例上放置一个断点,并检查是否正在调用其中一个案例,并跳到loadRides函数中,以确保它从其中返回。 作为附注,您在回复块中发回的信息必须是属性列表,否则回复块将始终失败。
链接地址: http://www.djcxy.com/p/27771.html