Как обновить openParentApplication для Watch OS 2?

У меня есть приложение для часов, которому необходимо взаимодействовать с родительским приложением для получения некоторой информации. Это должно происходить при использовании только часов и телефона в кармане. Раньше это работало так:

В 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 на открытом телефоне. Есть ли способ получить информацию из родительского приложения на телефоне, когда телефон не используется?


person Tom Kincaid    schedule 31.10.2015    source источник


Ответы (1)


Если это кому-нибудь поможет, я понял, что вам нужно запустить его в основном потоке.

- (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);
    });
}
person Tom Kincaid    schedule 31.10.2015
comment
Мой answerHandler отлично работает в любом потоке. Возможно, для создания вашего answerDictionary требуется основной поток? - person ccjensen; 02.11.2015