簡體   English   中英

如何在watchExtention中使用/導入NSObject類文件?

[英]How to use/import the NSObject class file in watchExtention?

我通過添加監視目標將watchExtension添加到了我現有的iPhone項目中。

我的iPhone應用程序使用CoreData,我編寫了NSObject類(DatabaseManagerClass)來管理CoreData(即從數據庫讀取/寫入)。 我想在手表應用程序中使用相同的類來管理數據庫中的相同記錄, 可以這樣做嗎?

我嘗試通過在“ InterfaceController”中導入“ classname.h(DatabaseManagerClass.h)”,但出現如下錯誤

在此處輸入圖片說明

我還為類文件添加了目標,但同樣的錯誤!

您的幫助將不勝感激。

您不能在Apple Watch擴展中使用UIApplicationDelegate類,因為其在Apple-Watch Extension中具有有限的API訪問權限。

有兩種方法可以在appleWatch中獲取核心數據

  1. 使用應用程序組概念通過共享數據獲取數據。
  2. 從iOS應用程序獲取數據並向iOS應用程序發送消息。

第一種方式:

有很多博客逐步展示了如何在Watch中獲取核心數據

第二種方式:

現在的問題是,我們如何從CoreData獲取數據並將其顯示在手表上?

好吧,為此,您需要通過WCSession與iOS應用WCSession並通過WCSession向iOS應用發送消息,並在iOS中獲取數據並對此消息請求進行回復。

請按照以下步驟完成任務:

第1步:

通過WCSession將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。

希望這可以幫助您了解流程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM