【问题标题】:Core Data and iCloud adding Pre-Populated sqlite fileCore Data 和 iCloud 添加预填充的 sqlite 文件
【发布时间】:2012-04-25 19:00:48
【问题描述】:

我正在开发一个使用 Core Data 和 iCloud 在多台 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: An error occurred while setting up the ubiquity integration: Error Domain=NSCocoaErrorDomain Code=134316 "The ubiquity 容器似乎与此持久性存储不匹配,它这可能是由于切换到不同的 iCloud 帐户或完全退出 iCloud 造成的。应使用只读属性重新打开商店或从 iCloud 同步中永久删除。 UserInfo=0x1cb590 {storeUUID=31381598-EAFA-4550-9B96-F501800974D5, containerUUID=E3A8DC7D-41FD-405A-8D8A-C06C8B467CA2, NSLocalizedDescription=ubiquity 容器似乎与此持久存储不匹配,这可能是由切换引起的到不同的 iCloud 帐户,或完全退出 iCloud。商店应使用只读属性重新打开或从 iCloud 同步中永久删除。}

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

【问题讨论】:

    标签: iphone ios ipad core-data icloud


    【解决方案1】:

    您不应该将预先创建的 Core Data 存储复制到 ubiquity 容器。旧的方法是在模拟器/设备/计算机上创建一个 SQLite 文件,并在第一次运行时将其复制到它的位置。如果您使用 iCloud,就不能再这样做了。 iCloud 的工作原理是每台设备接收一个作为“事务日志”的更改列表,然后将其应用于它自己的 SQLite 存储。它需要知道发生了什么变化,而一次性获取一个 .sqlite 文件不会告诉它。

    iCloud 的方法是:

    • 从代码内部创建初始数据(例如,insertStartData: 方法)。您可以从 plist 或您喜欢的任何内容中添加它。您必须先检查数据是否已经存在。
    • 使用 NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:error 复制您的初始商店。

    Here's the docs:

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

    【讨论】:

    • 非常感谢您的解释,我只需要在首次启动时将国家/地区列表(200 等)及其纬度和经度双精度值导入 coredata,plist 是否比捆绑 sqlite 文件更有效?使用 migratePersistentStore?
    • 是的,plist 会容易得多。记得检查它是否还没有被导入。
    • 嗨,你会用什么方法来测试商店需要在第一次运行时添加,另外,我有一个嵌套数据的 JSON 文件 - 最好使用什么方法?
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2011-04-15
    • 2011-10-26
    • 2013-06-08
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多