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

Добавих watchExtention към моя съществуващ проект за iPhone, като добавих цел за гледане.

Приложението ми за iPhone използва CoreData, написах NSObject клас (DatabaseManagerClass) за управление на CoreData (т.е. четене/запис от база данни). Искам да използвам същия клас в моето приложение за часовник, за да управлявам същия запис от базата данни, Мога ли да направя това?

Опитах се чрез импортиране на "classname.h(DatabaseManagerClass.h)" в "InterfaceController", но дава грешка както по-долу

въведете описание на изображението тук

Добавих и целта за файла Class, но същата грешка!

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


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];
}

Установете връзка и също така добавете метод на делегиране на приемник в съответния си клас, където трябва да получите данни от DB.

    - (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.

Надяваме се, че това ще ви помогне да разберете потока.

person CodeChanger    schedule 14.06.2017