Как использовать/импортировать файл класса NSObject в watchExtention?

Я добавил watchExtention в свой существующий проект iPhone, добавив цель просмотра.

Мое приложение для iPhone использует CoreData, я написал класс NSObject (DatabaseManagerClass) для управления CoreData (т.е. чтение/запись из базы данных). Я хочу использовать тот же класс в своем приложении для часов для управления той же записью из базы данных. Могу ли я это сделать?

Я попытался импортировать «classname.h(DatabaseManagerClass.h)» в «InterfaceController», но выдает ошибку, как показано ниже.

введите здесь описание изображения

Я также добавил цель для файла класса, но та же ошибка!

Ваша помощь будет оценена..


person Suhas Arvind Patil    schedule 13.06.2017    source источник


Ответы (1)


Вы не можете использовать класс UIApplicationDelegate в расширении Apple Watch, так как его ограниченный доступ к API в расширении Apple-Watch.

Есть 2 способа получить основные данные в AppleWatch.

  1. Извлекайте данные с помощью общих данных с концепцией группы приложений.
  2. Получить данные из приложения 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