【发布时间】:2012-02-12 05:11:47
【问题描述】:
我已经设法让我现有的核心数据应用程序与 iCloud 一起使用。经过几天的学习,它实际上非常简单。似乎有 3 件事是必不可少的:
添加一个权利文件(在最近的 Xcode 中,这可以通过选择目标,选择“摘要窗格”,向下滚动,选中启用权利来完成)
-
在我的情况下,在添加持久存储时添加正确的选项
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: // other options @"<arbitrary name>", NSPersistentStoreUbiquitousContentNameKey, iCloudURL, NSPersistentStoreUbiquitousContentURLKey, nil]在哪里
NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
此处的“nil”表示使用了来自 Entitlements.plist 文件的信息。
- 通过开发者门户为应用程序启用 iCloud 支持。这可能涉及生成一个唯一的应用程序 ID,这是我以前没有做过的事情。
实际上,目前我不确定这最后一步对开发是否至关重要——我已经启用了另一个没有这最后一步的应用程序,它似乎可以工作。
无论如何,我注意到不同iDevices上同一应用程序的两个现有核心数据库会将新条目同步到核心数据堆栈,但不会自动同步现有记录。
将数据从设备 A 同步到 B 的一种方法是删除 B 上现有的核心数据数据库,然后重新启动 B 上的应用程序。但是,这不是正确的合并。
在升级应用程序以使用 iCloud 支持(即使用上述选项等)时,是否有人知道如何合并不同应用程序上的两个现有核心数据数据库?
谢谢
【问题讨论】:
-
也许你能在这个类似的问题中找到帮助stackoverflow.com/questions/6588180/…
-
不,尽管 Recipes 应用程序包含有用的代码(其中在后台将存储添加到持久存储协调器 --- 在合并大型核心数据数据库时很有用)它不能解决问题合并两个不同设备上的两个预先存在的核心数据实例。我一直在寻找一种以某种方式重放事务日志的方法。
-
有任何进展@davidav?我遇到了同样的问题。
-
不,不是。我现在的行为越来越奇怪。似乎有些更新丢失了,这使得两个不同设备上的数据库不同。我现在正在使用在单独的线程中启动持久存储协调器的方法——就像上面的食谱一样——但这并没有让事情变得更好或更透明。