没有数组从父应用程序发送到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键将一个Stringpark )传递给父应用程序,但在父应用程序中,您正在测试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

上一篇: No array sent from parent app to Watch app

下一篇: Cross apply a table valued function