gpt4 book ai didi

iphone - 核心数据和iCloud添加预填充的sqlite文件

转载 作者:行者123 更新时间:2023-12-01 18:30:01 25 4
gpt4 key购买 nike

我正在开发一个使用Core Data和iCloud在多个iPad之间同步数据的应用程序。一切正常,我可以向每个iPad添加数据,并且它们将在所有iPad之间进行同步。

我有一个预填充了国家/地区列表的Core Data sqlite文件,我想在应用程序首次运行时将其复制到文档区域。我已经进行了这项工作,但是更改了我的persistentStoreCoordinator实现以测试是否支持iCloud,以及其他一些小更改。

但是现在当我检查sqlite文件是否存在并复制预先填充的sqlite文件(如果不存在)时,出现以下错误

[psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:iCloudData] options:options error:&persistentStoreError];

NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error::CoreData:Ubiquity:设置普遍存在的集成时发生错误:Error Domain = NSCocoaErrorDomain Code = 134316“普遍存在的容器似乎与该持久性存储不匹配,这很可能是由于切换到其他iCloud帐户或完全退出iCloud引起的。应使用只读属性重新打开商店,或将其从永久同步的iCloud中删除。” UserInfo = 0x1cb590 {storeUUID = 31381598-EAFA-4550-9B96-F501800974D5,containerUUID = E3A8DC7D-41FD-405A-8D8A-C06C8B467CA2,NSLocalizedDescription =泛型容器似乎与该持久性存储不匹配,这可能是由于切换引起的到其他iCloud帐户,或完全注销iCloud。应使用只读属性重新打开商店,或将其从永久同步的iCloud中删除。}

这是因为iCloud中仍然存在对其他Core Data sqlite文件或事务日志文件的引用吗?如果是这样,我将如何删除它们?

最佳答案

您不应该将预先创建的Core Data存储复制到普遍存在的容器中。这样做的旧方法是在Simulator / device / computer上创建一个SQLite文件,并将其复制到第一次运行的位置。如果您使用iCloud,则无法再执行此操作。 iCloud通过接收作为“事务日志”的更改列表的每个设备工作,然后将其应用于自己的SQLite存储。它需要知道发生了什么变化,并且一次获得一个.sqlite文件并不能说明这一点。

iCloud的方法是:

  • 从代码内部创建初始数据(例如insertStartData:方法)。您可以从plist中添加它,也可以添加任何它。您必须首先检查数据是否已经存在。
  • 使用NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:error在整个初始存储中进行复制。

  • Here's the docs:

    您不应使用预先打包的数据库文件来播种初始内容。相反,您应该在代码中创建默认项,或使用NSPersistentStoreCoordinator的migrationPersistentStore:toURL:options:withType:error:方法将预打包的数据库迁移到所需位置。

    关于iphone - 核心数据和iCloud添加预填充的sqlite文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10140400/

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