我想知道除了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
{
}