UIManagedDocument 创建包(文件夹)而不是原子存储。商店还在那儿,但它被埋在了包裹里。如果您右键单击模拟器中 Documents 文件夹中创建的文件,您将能够看到结构。默认是
mydocument.foo
-> StoreContent
-> persistentStore
您需要做的是为您的应用程序文件类型创建一个新的扩展名,例如,如果您的数据库扩展名是 .myappdb
您需要在项目设置中创建一个新的文档类型,可能是.myappdbw
. 您可以从条目中复制所有设置.myappdb
接下来,在您处理打开旧文档mydocumenturl
而不是将其传递给持久存储协调器的地方,您将创建上面的目录结构。
NSURL *newurl = [[mydocumenturl URLByDeletingPathExtension] URLByAppendingPathExtension:@"myappdbw"];
NSURL *desturl = [newurl URLByAppendingPathComponent:@"StoreContent"];
[[NSFileManager defaultManager] createDirectoryAtURL:desturl withIntermediateDirectories:YES attributes:nil error:NULL];
NSURL *finalurl = [desturl URLByAppendingPathComponent:@"persistentStore"];
然后将旧数据库移动到您创建的文件夹系统中
[[NSFileManager defaultManager] moveItemAtURL:mydocumenturl toURL:finalurl error:NULL];
然后您可以将捆绑网址传递给 UIManagedDocument
UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:newurl];
对 iCloud 集成有用的链接是
http://developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/_index.html
这有点神秘,因为到目前为止大部分承诺的示例代码都没有出现,但另一方面,它的推断大多相当简单。查看 WWDC2011 会话 107,116 和 315 以获得更多提示。
但请注意,如果您要使用此方法迁移旧文档,请不要设置NSPersistentStoreUbiquitousContentNameKey
迁移点,因为在您迁移时包会发生变化。上面的文档很好地描述了它。