Я разрабатываю приложение Apple Watch. Я могу отправлять данные в Apple Watch с iPhone, когда на iPhone происходит определенное событие. Тем не менее, я хочу, чтобы часы извлекали данные, когда они запускаются. Как мне решить проблему? Каков наиболее эффективный способ сделать это?WatchOS выборка данных с iPhone
ответ
WatchConnectivity
первых двух классов, которые должны взаимодействовать друг с другом (IOS и watchOS) должны соответствовать по <WCSessionDelegate>
и #import
WatchConnectivity
рамки
Перед отправкой данных необходимо проверьте, может ли ваше устройство отправить данные
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"WCSession is supported");
}
Затем, если вы хотите использовать «интерактивные сообщения» (сена dMessage API) вы должны видеть, если другое устройство достижимо первым:
if ([[WCSession defaultSession] isReachable]) {
//Here is where you will send you data
}
«Фоновые операции» API-интерфейсы не требуют устройств партнерских быть доступными в тот момент времени, когда вы называете WCSession API.
У вас есть несколько вариантов, когда речь идет о передаче данных между вашими приложениями, в Apple Documentation они описываются так:
Используйте метод
updateApplicationContext:error:
общаться только самую последнюю информацию о состоянии к контрагенту. Когда встречный сигнал просыпается, он может использовать эту информацию для обновления своего собственного состояния и оставаться в синхронизации. Отправка нового словаря с помощью этого метода перезаписывает предыдущий словарь.Использование метода
sendMessage:replyHandler:errorHandler:
илиsendMessageData:replyHandler:errorHandler:
для немедленного перевода данных. Эти методы предназначены для немедленной связи, когда ваши приложения iOS и расширение WatchKit являются активными.Используйте метод
transferUserInfo:
для перевода словаря данных в фоновом режиме. Выбранные словари поставлены в очередь для доставки в адрес партнера, и передача продолжается, когда текущее приложение приостановлено или завершено.Используйте метод
transferFile:metadata:
для передачи файлов в фоновом режиме. Используйте этот метод в тех случаях, когда вы хотите отправить более простой словарь значений. Например, используйте этот метод для отправки изображений или файлов на основе документов.
Я дам вам пример, как отправить/получить данные с контекстом Application
Отправить данные:
WCSession *session = [WCSession defaultSession];
NSError *error;
[session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error];
Получение данных:
- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {
NSLog(@"%@", applicationContext);
NSString *item1 = [applicationContext objectForKey:@"firstItem"];
int item2 = [[applicationContext objectForKey:@"secondItem"] intValue];
}
Для более информация о WatchConnectivity Я действительно рекомендую смотреть WWDC2015 session video и чтениях Apple Documentation on WatchConnectivity