Apple Watch 和 iPhone 之间是否有官方的数据传递方式?
Is there an official way to pass data between Apple Watch and iPhone?
我想知道除了MMWormhole之外还有没有其他方法可以在iPhone和Apple Watch之间传递基本数据。您知道现有的官方 Apple 框架是否允许这样做吗?
有可能。
正在查看:The WatchKit Doc's
iPhone上有关于手表应用和扩展之间共享数据的段落。
引用第一段。
Sharing Data with Your Containing iOS App
If your iOS app and WatchKit extension rely on the same data, use a shared app group to store that data. An app group is a secure container that multiple processes can access. Because your WatchKit extension and iOS app run in separate sandbox environments, they normally do not share files or communicate directly with one another. An app group lets the two processes share files or user defaults information between them.
据我了解,MMWormhole 对于两个二进制文件之间接近实时的数据更改非常方便。而此方法允许访问由 iPhone 应用程序保存的数据,这些数据可以由 Watch 应用程序读取,反之亦然。
我们可以使用组在 iPhone 和 iWatch 之间传递数据。
基本上我们可以使用 NSUserDefaults 共享数据。
但为此您需要启用它,请参阅以下步骤:
1)在你的项目目标中打开功能部分
2) 从该部分打开应用程序组
3) 通过单击名称为 group.test.demo
的 + 按钮添加容器
实现该目的的示例代码。
在您的 iphone 应用程序代码中
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults setObject:@"tejas" forKey:@"name"];
现在为键 "name" 设置了值 "tejas"
用于检索的代码
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults objectForKey:@"name"];
祝你好运:)
如果您查看 WKInterfaceController 的文档,您会发现一个名为 openParentApplication:reply:
的方法,它允许您在后台与主机应用程序通信。
如上所述,我使用了共享应用程序组并将核心数据文件放在该组中。使用这种技术,phone 应用程序和手表都可以读取和写入相同的数据,并且当它们 运行 离散时一切都很好。由于每个进程 运行 都在一个单独的沙箱中,因此您 运行 会遇到经典的分布式数据库问题,即可能会覆盖来自不同来源的数据。
为了克服这个问题,您需要放置数据观察器。我求助于使用 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
{
}
我想知道除了MMWormhole之外还有没有其他方法可以在iPhone和Apple Watch之间传递基本数据。您知道现有的官方 Apple 框架是否允许这样做吗?
有可能。
正在查看:The WatchKit Doc's
iPhone上有关于手表应用和扩展之间共享数据的段落。
引用第一段。
Sharing Data with Your Containing iOS App
If your iOS app and WatchKit extension rely on the same data, use a shared app group to store that data. An app group is a secure container that multiple processes can access. Because your WatchKit extension and iOS app run in separate sandbox environments, they normally do not share files or communicate directly with one another. An app group lets the two processes share files or user defaults information between them.
据我了解,MMWormhole 对于两个二进制文件之间接近实时的数据更改非常方便。而此方法允许访问由 iPhone 应用程序保存的数据,这些数据可以由 Watch 应用程序读取,反之亦然。
我们可以使用组在 iPhone 和 iWatch 之间传递数据。
基本上我们可以使用 NSUserDefaults 共享数据。
但为此您需要启用它,请参阅以下步骤: 1)在你的项目目标中打开功能部分
2) 从该部分打开应用程序组
3) 通过单击名称为 group.test.demo
的 + 按钮添加容器实现该目的的示例代码。
在您的 iphone 应用程序代码中
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults setObject:@"tejas" forKey:@"name"];
现在为键 "name" 设置了值 "tejas"
用于检索的代码
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults objectForKey:@"name"];
祝你好运:)
如果您查看 WKInterfaceController 的文档,您会发现一个名为 openParentApplication:reply:
的方法,它允许您在后台与主机应用程序通信。
如上所述,我使用了共享应用程序组并将核心数据文件放在该组中。使用这种技术,phone 应用程序和手表都可以读取和写入相同的数据,并且当它们 运行 离散时一切都很好。由于每个进程 运行 都在一个单独的沙箱中,因此您 运行 会遇到经典的分布式数据库问题,即可能会覆盖来自不同来源的数据。
为了克服这个问题,您需要放置数据观察器。我求助于使用 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
{
}