是否有官方方法可以在Apple Watch和iPhone之间传递数据



我想知道除了MMWormhole之外,是否有其他方法可以在iPhone和Apple Watch之间传递基本数据。你知道是否有任何现有的官方苹果框架允许这样做吗?

这是可能的。

查看:WatchKit Doc的

有一段关于在手表应用程序和iPhone上的扩展程序之间共享数据。

引用第一段。

与包含的iOS应用程序共享数据

如果 iOS 应用和 WatchKit 扩展依赖于相同的数据,请使用共享应用组来存储该数据。应用组是多个进程可以访问的安全容器。由于 WatchKit 扩展和 iOS 应用在单独的沙盒环境中运行,因此它们通常不会共享文件或直接相互通信。应用组允许两个进程在它们之间共享文件或用户默认信息。

据我了解,MMWormhole对于2个二进制文件之间的实时数据更改非常方便。而此方法允许访问iPhone应用程序保存的数据,这些数据可以被手表应用程序读取,反之亦然。

我们可以使用组在iPhone和iWatch之间传递数据。

基本上,我们可以使用 NSUserDefaults 共享数据。

但为此,您需要启用它,请参阅以下步骤:1)在项目目标中打开功能部分

2)从该部分打开应用程序组

3)通过单击名称为组的+按钮添加容器.测试.演示

实现此目的的示例代码。

在您的 iPhone 应用程序代码

NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults setObject:@"tejas" forKey:@"name"];

现在为键"名称"设置值"Tejas"

用于检索该代码的代码

 NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults objectForKey:@"name"];

祝你好运:)

如果您查看 WKInterfaceController 的文档,您会发现一个名为 openParentApplication:reply: 的方法,它允许您在后台与主机应用程序进行通信。

如上所述,我使用了一个共享的应用程序组,并将核心数据文件放在该组中。 使用这种技术,手机应用程序和手表都可以读取和写入相同的数据,并且在离散运行时一切都很好。 由于每个进程都在单独的沙箱中运行,因此您会遇到典型的分布式数据库问题,即可能会覆盖来自不同源的数据。

为了克服这个问题,您需要将数据观察者放置到位。 我求助于 NSDistributedNotificationCenter 在应用程序和手表扩展之间传递一些自定义消息,但可能有一个更优雅的解决方案。 其他人有什么想法吗?

使用监视连接。

// 1. In .m viewcontroller on phone & interface controller on iwatch
#import <WatchConnectivity/WatchConnectivity.h> 
@interface IController()<WCSessionDelegate>
@end
if ([WCSession isSupported]) {
    WCSession *session = [WCSession defaultSession];
    session.delegate = self;
    [session activateSession];}

// 2. Send Message  - Phone or iWatch:
[[WCSession defaultSession] sendMessage:response
                           replyHandler:^(NSDictionary *reply) {
                               NSLog(@"%@",reply);
                           }
                           errorHandler:^(NSError *error) {
                               NSLog(@"%@",error);
                           }
 ];
// 3. Receive Message - Phone or iWatch
- (void)session:(WCSession *)session didReceiveMessage: (NSDictionary<NSString *, id> *)message
 {
 }

最新更新