Вы не можете использовать класс UIApplicationDelegate
в расширении Apple Watch, так как его ограниченный доступ к API в расширении Apple-Watch.
Есть 2 способа получить основные данные в AppleWatch.
- Извлекайте данные с помощью общих данных с концепцией группы приложений.
- Получить данные из приложения iOS с отправкой сообщения в приложение iOS.
1-й способ:
Существует множество блогов, в которых пошагово показано, как получить основные данные в Watch.
2-й способ:
Теперь вопрос в том, как мы можем получить данные из CoreData
и показать их на часах?
Что ж, для этого вам нужно связать свои Apple Watch с приложением iOS через WCSession
и отправить сообщение в приложение iOS через этот класс, получить данные в iOS и ответить на этот запрос сообщения.
Выполните следующие действия, чтобы выполнить задачу:
Шаг 1:
Подключите Apple Watch к iOS через WCSession
- (void)willActivate {
// This method is called when watch view controller is about to be visible to user
[super willActivate];
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
[self.session sendMessage:@{@"GetCoreData":@"YES"} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
//Get Reply Message along with data and use this data in Apple watch
} errorHandler:^(NSError * _Nonnull error) {
//Handle error
}];
}
}
#pragma mark -- WCSessionDelegate --
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message replyHandler:(void(^)(NSDictionary<NSString *, id> *replyMessage))replyHandler{
}
- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error{
}
Здесь в replyHandler
вы получите свои данные.
Шаг 2. Установите соединение через устройство iOS, чтобы получать сообщения от Apple Watch.
if ([WCSession isSupported]) {
_session=[WCSession defaultSession];
_session.delegate=self;
[_session activateSession];
}
Установите соединение, а также добавьте метод делегата приемника в свой соответствующий класс, где вам нужно получить данные из БД.
- (void)session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler {
if ([[message objectForKey:@"OpeniOS"] isEqualToString:@"YES"]) {
// Fetch your data from DB.
// After successfully fetching data reply back to Apple watch by reply Block
replyHandler(<your_data>);
}
}
На основании этого вы получите свои данные CodeData в свои часы Apple Watch.
Надеюсь, это поможет вам понять поток.
person
CodeChanger
schedule
14.06.2017