0

我正在尝试在 iOS 和 WatchOS 2 之间同步用户详细信息。在以前版本的 WatchKit 应用程序组中分享此类偏好非常好,但在版本 2 中我正在为此苦苦挣扎。

现在我尝试使用WCSession'stransferUserInfo:方法发送 userInfo,然后将该 userInfo 保存到 watchOS 的 userDefaults 中。但问题是对于这样的细节手表必须首先要求 iPhone 发送用户信息。如果没有使用 iPhone 应用程序,那么在这种情况下,Watch App 不会反映 userInfo 中的更改。

有人对 WatchOS 2 中的这种实现有想法吗?我是否做正确的事情请建议是否有人对此有所了解。

4

1 回答 1

3

如果您在手表上使用WCSession's sendMessageAPI,如果 iOS 应用程序尚未运行,它将在后台唤醒它。因此,您可以执行以下操作:

观看扩展代码:

[[WCSession defaultSession] sendMessage:@{@"cmd":@"sendUpdate"} replyHandler:nil errorHandler:^{ /*handle errors*/ }]

iOS 应用代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    <...>
    [[WCSession defaultSession] setDelegate:self];
    [[WCSession defaultSession] activateSession];
    <...>
}

- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error {
}

- (void)sessionDidBecomeInactive:(WCSession *)session
{}

- (void)sessionDidDeactivate:(WCSession *)session
{
    [session activateSession];
}

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message {
    NSString *cmd = message[@"cmd"];
    if ([cmd isEqual:@"sendUpdate"]) {
        [self sendUpdate];
    }
}

- (void)sendUpdate {
    WCSession *session = [WCSession defaultSession];
    if (session.isWatchAppInstalled && session.activationState == WCSessionActivationStateActivated) {
        [[WCSession defaultSession] transferUserInfo:[self dictionaryFullOfUpdates]];
    }
}

这显然比你可能做的简单,但应该给你的想法

于 2016-04-05T17:13:25.793 回答