在Watch Extension和iPhone上使用相同的iCloud启用CoreData存储

时间:2015-05-14 14:58:53

标签: core-data icloud watchkit

当我从Apple Watch Extension打开 iCloud Enabled CoreData商店时,我目睹了一些奇怪的行为。 我在所有目标上使用相同的iCloud Container。

这是一张图片,显示了无处不在容器内的文件夹(普遍容器)结构:

Different stores for Apple Watch & iPhone

看起来它为iPhone和iPhone创造了不同的商店。观看

我在iPhone应用程序之间共享相同的CoreData堆栈&观看扩展。任何想法为什么会这样? 如果我理解正确,它会对待iPhone应用程序&将分机视为单独的用户?

如果有人可以提出建议我真的很感激。

2 个答案:

答案 0 :(得分:0)

您应该使用应用程序组在Watch和iPhone之间共享相同的Core Data存储。为两个目标启用应用程序组,在配置文件中对其进行配置,然后像下面这样获取持久性存储URL:

NSURL *storeURL = [[NSFileManager defaultManager] 
     containerURLForSecurityApplicationGroupIdentifier:appGroupIdentifier];

手表将通过也为应用程序组启用的WatchKit扩展程序访问Core Data存储。参见例如Apple的App Extension Programming Guide中的图4.1。

enter image description here

答案 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)来响应手表扩展。