有没有官方的方式在Apple Watch和iPhone之间传递数据?

时间:2015-01-19 11:53:02

标签: ios apple-watch

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

5 个答案:

答案 0 :(得分:3)

有可能。

查看:The WatchKit Doc's

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

引用第一段。

  

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

     

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

据我所知,MMWormhole在2个二进制文件之间的实时数据变化方面非常方便。而这种方法允许访问iPhone应用程序保存的数据,可由Watch App和Vice Versa读取。

答案 1 :(得分:3)

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

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

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

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

3)点击名为group.test.demo

的+按钮添加容器

实现该目的的示例代码。

在您的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"];
祝你好运:)

答案 2 :(得分:2)

如果您查看WKInterfaceController的文档,则会找到一个名为openParentApplication:reply:的方法,该方法允许您在后台与主机应用进行通信。

答案 3 :(得分:0)

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

要解决此问题,您需要将数据观察器放在适当的位置。我使用NSDistributedNotificationCenter在应用程序和手表扩展程序之间传递一些自定义消息,但可能有更优雅的解决方案。来自其他人的任何想法?

答案 4 :(得分:0)

使用手表连接功能。

// 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

 {

 }