gpt4 book ai didi

ios - UIManagedDocument 只能读取文件包的文档

转载 作者:可可西里 更新时间:2023-11-01 05:31:50 27 4
gpt4 key购买 nike

我的应用使用核心数据 SQLite 数据库。我想让我的用户使用 iCloud 在设备之间同步它 - 我想我可以使用 UIManagedDocument。

我按照 Apple 的文档对其进行了子类化,并且在需要创建新的持久存储文件时可以使用。但是,当我尝试使用它打开我的旧持久存储文件时,出现以下异常抛出错误:

“UIManagedDocument 只能读取文件包的文档”

这是否意味着我需要将旧的持久存储迁移到由 UIManagedDocument 管理的新存储?如果是这样,我是否需要手动执行此操作(即一次从旧存储读取每条记录并将其写入新存储)?

提前致谢!

最佳答案

UIManagedDocument 创建包(文件夹)而不是原子存储。商店还在那里,但它被埋在包裹里了。如果您右键单击在模拟器的文档文件夹中创建的文件,您将能够看到该结构。默认是

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];

然后您可以将包 url 传递给 UIManagedDocument

UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:newurl];

一个对 iCloud 集成有用的链接是

http://developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/_index.html

这有点神秘,因为大多数 promise 的示例代码到目前为止都没有出现,但另一方面,它的推断大多相当简单。查看 WWDC2011 session 107,116 和 315 以获得更多提示。

但请注意,如果您要使用此方法迁移遗留文档,请不要在迁移时设置NSPersistentStoreUbiquitousContentNameKey,因为包会在迁移时更改。上面的文档描述得很好。

关于ios - UIManagedDocument 只能读取文件包的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com