我在最后几天都在苦苦挣扎,以便为我使用MagicalRecord框架管理的数据启用iCloud支持。
我做了有关配置文件的所有内容,以及xCode中的所有设置。在代码而不是调用
[MagicalRecord setupAutoMigratingCoreDataStack];
我正在打电话
[MagicalRecord setupCoreDataStackWithiCloudContainer:@"AppIDFromiTunesConnect.com.companyName.myAppName" localStoreNamed:@"whatever"];
我尝试通过在iPhone模拟器上触发iCloud同步来模拟同步。但似乎没有任何事情发生。我在developer.iCloud.com上看不到任何内容。
问题:任何人都有 iCloud with MagicalRecord 启动并运行?你能解释一下如何完成它吗?
答案 0 :(得分:6)
好的伙计们,我想我已经开始工作了。
UPDATE 最初它对我有用,但我有一些非常奇怪的效果,如果你从iCloud注销无处不在的容器被删除,这让我想到了另类解决方案。现在我使用Ensembles库,我对此非常满意。 END UPDATE
我只是拉扯了我自己在2年前写过的测试应用程序,它没有CoreData也没有iCloud,它看起来效果很好。它在我的iPhone和iPhone模拟器上同步数据库。让我疯狂的一件小事是,我仍然没有在https://developer.icloud.com上看到任何东西..
现在我要为我的分布式应用做同样的事情。这正是我所做的:
[MagicalRecord setupAutoMigratingCoreDataStack];
在这种情况下,MagicalRecord会创建一个本地商店,通过调用[MagicalRecord defaultStoreName]
可以获得该名称。您需要在iCloud设置调用中说明这一个。所以我现在在AppDelegate.m中的代码是:
NSString *defaultStoreName = [MagicalRecord defaultStoreName];
[MagicalRecord setupCoreDataStackWithiCloudContainer:@"Container ID from Developer Portal (as on image)"
contentNameKey:@"DataStorage" // It seems like you can write whatever you want here
localStoreNamed:defaultStoreName // Unless not specifically named earlier
cloudStorePathComponent:@"stuff"]; // Seems like you can write whatever stuff you want.
这种方法对我有用。另一个较短的iCloud设置调用方法(没有ContentNameKey)没有例外,但没有正常工作。我想,你只需要说出ContentNameKey。
您可以在此处获取Developer Portal上的容器ID。我知道,这似乎是一个非常详细的说明,但我希望我能够清楚地知道" iCloudContainer"上面函数中的字符串实际上是iCloudContainerID,应该从Developer Portal中检索。
现在尝试至少在模拟器上运行应用程序。如果您没有" iCloud未启用"日志中的消息,您在中途。
注册负责所有Core Data操作的对象,以便在以下事件中收听NotificationCenter
:
NSPersistentStoreCoordinatorStoresWillChangeNotification
NSPersistentStoreCoordinatorStoresDidChangeNotification
NSPersistentStoreDidImportUbiquitousContentChangesNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(storesWillChange:)
name:NSPersistentStoreCoordinatorStoresWillChangeNotification
object:nil];
并正确处理更改。
艰苦的工作还有待完成,现在取决于你的项目,我不能单独给你任何建议。
对我来说,问题是:
但我希望在official Apple Manual to iCloud找到我问题的所有答案。
我很高兴为您避免了几天的头痛!如果此解决方案适用于您的项目,请撰写评论!
答案 1 :(得分:0)
您上面所做的事情是正确的,但有些事情需要检查。