Using same iCloud enabled CoreData store across Watch Extension and iPhone

不问归期 提交于 2019-12-12 06:14:12

问题


I'm witnessing some strange behaviour when opening iCloud Enabled CoreData store from Apple Watch Extension. I'm using the same iCloud Container across all targets.

Here is a picture that shows what folder (ubiquity container) structure looks like inside the ubiquity container :

It looks like it creates different stores for iPhone & Watch

I'm sharing the same CoreData Stack between iPhone app & Watch Extension. Any ideas why this is happening ? If I understand this correctly it treats iPhone app & Watch Extension as a separate users ?

I would really appreciate if someone could give an advice.


回答1:


You should use app groups to share the same Core Data store between Watch and iPhone. Enable app groups for both targets, configure it in your provisioning profiles and then get your persistent store URL like this:

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

The watch would be accessing the Core Data store via a WatchKit extension also enabled for app groups. See e.g. Figure 4.1 in Apple's App Extension Programming Guide.




回答2:


Consider having your WatchKit Extension use openParentApplication to communicate with the parent app. Using openParentApplication is simple to implement and helps keep the code in the WatchKit extension simple and fast.

From the WatchKit Extension InterfaceController, call openParentApplication.

NSDictionary *requst = @{@"request":@"myRequest"};

    [InterfaceController openParentApplication:requst reply:^(NSDictionary *replyInfo, NSError *error) {

            if (error) {
                NSLog(@"%@", error);
            } else {
                // DO STUFF
            }
        }];

Then, reply from the app using

 - (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{

Consider also using JSON data (NSJSONSerialization) in the main app to respond to the watch extension.



来源:https://stackoverflow.com/questions/30240585/using-same-icloud-enabled-coredata-store-across-watch-extension-and-iphone

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!