我有一个手表应用程序,需要与父应用程序通信以获取一些信息。仅在口袋中使用手表和电话时,才应该发生这种情况。它曾经这样工作:

在手表上的InterfaceController中:

[InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {
     // handle response from phone
}];

在手机的AppDelegate中:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
    NSDictionary *response = // generate response
    reply(response);
}

我试图将InterfaceController中的代码更改为:
[[WCSession defaultSession] sendMessage:request
                replyHandler:^(NSDictionary *reply) {
                }
                errorHandler:^(NSError *error) {
                }
];

而AppDelegate中的代码似乎从未被调用过:
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> *replyMessage))replyHandler {
     // this never gets called
}

我已经看到了在手表上使用sendMessage的示例,但是它们都要求委托位于打开的电话上的ViewController中。不使用手机时,是否可以从手机上的父应用程序获取信息?

最佳答案

如果这对任何人都有帮助,我发现您必须在主线程上运行它。

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> *replyMessage))replyHandler {
    dispatch_async(dispatch_get_main_queue(), ^{
        // do stuff here
        replyHandler(replyDictionary);
    });
}

关于ios - 如何为Watch OS 2更新openParentApplication?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33454572/

10-09 08:05