当我从Apple Watch Extension打开 iCloud Enabled CoreData商店时,我目睹了一些奇怪的行为。 我在所有目标上使用相同的iCloud Container。
这是一张图片,显示了无处不在容器内的文件夹(普遍容器)结构:
看起来它为iPhone和iPhone创造了不同的商店。观看
我在iPhone应用程序之间共享相同的CoreData堆栈&观看扩展。任何想法为什么会这样? 如果我理解正确,它会对待iPhone应用程序&将分机视为单独的用户?
如果有人可以提出建议我真的很感激。
答案 0 :(得分:0)
您应该使用应用程序组在Watch和iPhone之间共享相同的Core Data存储。为两个目标启用应用程序组,在配置文件中对其进行配置,然后像下面这样获取持久性存储URL:
NSURL *storeURL = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:appGroupIdentifier];
手表将通过也为应用程序组启用的WatchKit扩展程序访问Core Data存储。参见例如Apple的App Extension Programming Guide中的图4.1。
答案 1 :(得分:0)
考虑让您的WatchKit扩展使用openParentApplication与父应用程序进行通信。使用openParentApplication很容易实现,有助于简化和快速保持WatchKit扩展中的代码。
从WatchKit Extension InterfaceController中,调用openParentApplication。
NSDictionary *requst = @{@"request":@"myRequest"};
[InterfaceController openParentApplication:requst reply:^(NSDictionary *replyInfo, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
// DO STUFF
}
}];
然后,使用
从应用程序回复 - (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{
还要考虑在主应用中使用JSON数据(NSJSONSerialization)来响应手表扩展。