gpt4 book ai didi

ios - WatchOS 2.0 在 iOS App 和 WatchOS App 之间共享数据

转载 作者:行者123 更新时间:2023-11-29 01:22:14 25 4
gpt4 key购买 nike

Previous 我使用 NSUserDefaults 在 watch 和应用程序之间共享基本变量。

我的目标是在 watch 上显示存储在 iPhone 应用程序 NSUserDefaults 上的用户电子邮件地址。我了解在 Watch v1 之后,您将无法再使用 App Groups 来共享数据。

我知道您需要使用 Watch Connectivity API,但我只能弄清楚如何在操作发生时使用它。在 Watch App 启动之前不会。

如果您有任何想法,请告诉我。

最佳答案

是的,您可以将电子邮件存储在 iPhone 上的 NSUserDefaults 中,并在 watch 上显示。为此,您需要使用 Watch Connectivity API 向 iPhone 发送消息,并在收到此消息时使用您从 NSUserDefaults 获取的电子邮件地址进行响应。这可能会在 Watch 上的应用程序启动后发生,但不会在此之前发生。如果您不想每次都向 iPhone 索要它,您可以将它缓存在 Watch 上以备将来使用。如果它在 iPhone 上发生变化,您也可以向 Watch 发送消息以进行更新。

下面是一些示例代码,展示了如何使用 Swift 从 Apple Watch 发出请求并使用 Objective-C 在 iPhone 上响应它。

启动后 Watch 应用代码中的某处:

if WCSession.defaultSession().reachable {
WCSession.defaultSession().sendMessage(["email-request": "email"], replyHandler: { (reply: [String : AnyObject]) -> Void in
//success
dispatch_async(dispatch_get_main_queue()) {
if let email = reply["email-request"] as? String {
//store the email, display it, etc
}
}
}, errorHandler: { (error: NSError) -> Void in
dispatch_async(dispatch_get_main_queue()) {
//couldn't get email, maybe show error message
}
})
} else {
//iPhone not available, maybe show error message
}

在您的 iPhone 应用程序的 AppDelegate 中:

- (void)session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler
{
dispatch_async(dispatch_get_main_queue(), ^{
if (message[@"email-request"]) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
replyHandler(@{@"email-request": @([defaults stringForKey:@"email"])});
}
});
}

请注意,app delegate 和 extension delegate 都必须采用 WCSessionDelegate 协议(protocol),并且需要正确激活它们。查看Watch Connectivity Framework Reference了解更多信息。

关于ios - WatchOS 2.0 在 iOS App 和 WatchOS App 之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34457888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com