Я работаю над расширением WatchKit своего приложения и имею некоторые проблемы с осложнениями.Сохранение моих осложнений WatchKit в актуальном состоянии, когда не работает
У меня есть сложность, которая отображает заданную общую сумму, которая зависит от того, что пользователь делает в приложении iOS. Когда приложение WatchKit Extension запущено, приложение iOS обновляет контекст приложения часов, используя метод -[WCSession updateApplicationContext:]
. Он отлично работает, а затем в приложении ExtensionDelegate моего наблюдения я вручную обновляю сложность с новыми данными.
Но это нормально, только если расширение работает (если нет, оно не получит контекст приложения до следующего запуска).
Итак, я отредактировал свой код, чтобы отправить данные о осложнениях непосредственно в Watch, когда пользователь изменил что-то в приложении iOS, используя метод -[WCSession transferCurrentComplicationUserInfo:]
(он написан в документации, которую ExtensionDelegate следует разбудить, чтобы получить информацию о пользователе в задний план).
Я применил метод ExtensionDelegate -session:didReceiveUserInfo:
, чтобы обновить сложность при получении данных из приложения iOS, но он не работает, когда расширение не работает ... (и я не знаю, если он когда-либо получает информацию о пользователе, так как я не могу его зарегистрировать)
Как мне сделать, чтобы мои осложнения обновлялись, даже когда расширение не работает?
Благодаря
PS: Я использую Watch Simulator, и «закрыть» расширение Я просто Перезапустите часы (из меню Hardware)
Редактировать: Мне удалось выйти заявления, когда приложение не работает (путем открытия системного журнала Watch Simulator), и я получаю эти строки, когда IOS отправить новые пользовательские данные осложнением для расширения часов:
окт 18 18:08:11 pc16 Расширение WatchApp [26615]: полученное расширение запрос просыпаться для поддержки осложнений.
18 октября 18:08:11 pc16 assertiond [26585]: утверждение не удалось: 15A284 13S343: assertiond + 15398 [B48FCADB-A071-3A46-878B-538DC0AFF60B]: 0x1
Так часы получает хорошо пользователь Информация о словаре, но, кажется, не в состоянии пробуждения расширения ...
Edit 2: здесь это часть коды в ExtensionDelegate, который должен получать информацию пользователя осложнения (но не вызываются, когда приложение не работает):
- (void) session: (WCSession *)session didReceiveUserInfo: (NSDictionary *)userInfo
{
NSLog(@"session:didReceiveUserInfo: %@", userInfo);
NSString *userInfoType = userInfo[KHWASessionTransferUserInfoType];
NSDictionary *userInfoContents = userInfo[KHWASessionTransferUserInfoContents];
// Complication Data
if ([userInfoType isEqualToString:KHWASessionTransferUserInfoTypeComplicationData]) {
// Store the complication data into user defaults
[[NSUserDefaults standardUserDefaults] setValue:userInfoContents[KHWAComplicationTotalBalance] forKey:KHWAComplicationTotalBalance];
[[NSUserDefaults standardUserDefaults] synchronize];
// And refresh the complications
CLKComplicationServer *complicationServer = [CLKComplicationServer sharedInstance];
for (CLKComplication *complication in complicationServer.activeComplications) {
[complicationServer reloadTimelineForComplication:complication];
}
}
}
Edit 3: WCSession устанавливается в расширение делегата applicationDidFinishLaunching
метода:
- (void) applicationDidFinishLaunching
{
// Setup the WatchConnectivity session
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
[...]
}
Где именно у вас реализованы '-session: didReceiveUserInfo: 'в вашем WatchExtension? – joern
в файле ExtensionDelegate.m (определяется как: '@interface ExtensionDelegate: NSObject') –
Пожалуйста, добавьте соответствующий код из вашего ExtensionDelegate к вашему вопросу. – joern