繁体   English   中英

WatchOS 2-iOS UserDefaults共享

[英]WatchOS 2 - iOS UserDefaults sharing

我正在尝试在iOS和WatchOS 2之间同步用户详细信息。在WatchKit App的早期版本中,可以很好地共享此类首选项,但是在version2中,我却在努力做到这一点。

现在,我尝试使用WCSessiontransferUserInfo:方法发送userInfo,然后将该userInfo保存到watchOS的userDefaults中。 但是问题是,对于这种细节手表必须首先要求iPhone发送UserInfo。 如果未使用iPhone应用程序,则在这种情况下,Watch App无法反映userInfo中的更改。

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

如果您在手表上使用WCSessionsendMessage API,它将在后台启动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]];
    }
}

这显然比您可能会做的要简单,但是应该可以给您带来启发

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM