' iPhone应用程序中的UIApplicationDelegate从未调用reply()'一下子就出错了

时间:2015-08-17 14:52:45

标签: ios swift watchkit uiapplicationdelegate

我最近通过Time Capsule备份恢复了以前版本的应用程序,除了一件事之外,一切都正常。当我尝试为我的应用程序使用手表扩展时,它永远不会收到来自父应用程序的回复。我没有改变任何代码,但无论如何它都无法工作。即使我只是发送一个空请求和一个简单的字符串,我也会得到同样的错误:

  

iPhone App中的UIApplicationDelegate从未调用reply()

这是我的代码的简化版本:

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)

    WKInterfaceController.openParentApplication(["test": "test"]) { userInfo, error in
        println("User Info: \(userInfo)")
        println("Error: \(error)")
    }        
}

代表:

func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {
    let favouritesArrayDefaults = NSUserDefaults.standardUserDefaults().arrayForKey("favourites")!

    if let pfqueryRequest: AnyObject = (userInfo as? [String: AnyObject])?["parkName"] {
    } else {
        let taskID = beginBackgroundUpdateTask()

        reply(["Success": "Success"])

        endBackgroundUpdateTask(taskID)
    }
}

有人有什么想法吗?

3 个答案:

答案 0 :(得分:0)

你应该立即拨打手表的回复功能。您不能等到异步功能完成。到那时手表已经放弃并决定手机没有回复。我不能再在Apple的文档中找到相应的声明,但我确实记得读过它。

答案 1 :(得分:0)

您的代码不会在第一个if块(在else之前)调用replyBlock。可能是您看到错误日志的代码路径?

答案 2 :(得分:0)

想出来!这一行:

let favouritesArrayDefaults = NSUserDefaults.standardUserDefaults().arrayForKey("favourites")!

如果数组为空,会崩溃。这是我第一次在主应用程序中尝试使用空数组的监视应用程序,这就是为什么它以前从未发生过。