2

我正在为 iOS 开发一个小型时间跟踪应用程序。用户可以创建任意数量的活动,然后跟踪他在每个活动上花费了多少时间(例如睡觉、开车上班、吃饭、工作等)。

现在我想添加 Apple Watch 支持:用户应该能够从他的手表上的列表中选择一个活动,输入一个时间值并将这个结果提交给 iOS 应用程序,然后更新它的数据。

所以,我需要双向沟通:

iOS -> Watch:
    List of configured activties

Watch -> iOS
    Add time XY for activity 123

WCSession在双方都实施了,但无论我尝试什么,似乎都没有沟通:

// iOS App Delegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    ...
    if ([WCSession isSupported]) {
        session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
    }
}

- (void)updateActitviesOnWatch:(NSDictionary<NSString *, id> *)data {
    if (session != nil && session.paired && session.activationState == WCSessionActivationStateActivated) {
        [session updateApplicationContext:data error:nil];

        [session sendMessage:data replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
            NSLog(@"sendMessage : success");
        } errorHandler:^(NSError * _Nonnull error) {
            NSLog(@"sendMessage : error");
        }];

        [session transferUserInfo:data];
    }
}


// WatchExtension ExtensionDelegate.m
- (void)applicationDidFinishLaunching {
    if ([WCSession isSupported]) {
        session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
    }
}

- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error {
    NSLog(@"WK activationDidCompleteWithState");
}

- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *, id> *)userInfo {    
    NSLog(@"WK session didReceiveUserInfo");
}

- (void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *, id> *)applicationContext {
    NSLog(@"WK session didReceiveApplicationContext");
}

- (void)session:(WCSession * __nonnull)session didFinishUserInfoTransfer:(WCSessionUserInfoTransfer *)userInfoTransfer error:(nullable NSError *)error {
    NSLog(@"WK session didFinishUserInfoTransfer");
}

无论使用哪种方法在 iOS (或) 上发送数据updateApplicationContext:error:,都不会在 Watch 上调用接收委托方法。sendMessage:replyHandler:errorHandlertransferUserInfo:

我做错了什么?

首先转移数据的正确方法是什么?

4

0 回答 0