[英]WatchOS 2 - iOS UserDefaults sharing
我正在尝试在iOS和WatchOS 2之间同步用户详细信息。在WatchKit App的早期版本中,可以很好地共享此类首选项,但是在version2中,我却在努力做到这一点。
现在,我尝试使用WCSession
的transferUserInfo:
方法发送userInfo,然后将该userInfo保存到watchOS的userDefaults中。 但是问题是,对于这种细节手表必须首先要求iPhone发送UserInfo。 如果未使用iPhone应用程序,则在这种情况下,Watch App无法反映userInfo中的更改。
有人对在WatchOS 2中实现这种想法有想法吗? 我在做正确的事,请建议是否有人对此有所了解。
如果您在手表上使用WCSession
的sendMessage
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.