【问题标题】:How to migrate a Core Data persistent store without process being killed on iOS?如何在 iOS 上不被杀死进程的情况下迁移 Core Data 持久存储?
【发布时间】:2012-01-27 10:13:26
【问题描述】:

我使用 Core Data 来维护一个持久存储,并且数据库可以变得非常大。我在 iPad 1s 上拥有较大数据库的用户没有及时完成轻量级迁移,以便在应用程序因挂起而被 iOS 杀死之前完成。

我想要做的是每次服务器启动时,检查数据库是否需要迁移(我在 NSPersistentStoreCoordinator 上找不到这个方法),如果它确实保持服务器启动过程直到数据库升级并在屏幕上显示一个微调器,然后在服务器启动过程中继续前进。最好的方法似乎是在服务器启动方法中添加 - (BOOL) upgradeStoreNeedsUpgrade 方法,但我找不到检查方法。我没有在 NSPersistentStoreCoordinator 或 NSPersistentStore 上看到用于检查给定 URL 上的数据库与给定托管对象模型的兼容性的方法。

我的解决方案是否正确,如果正确,如何检查托管对象模型是否与给定 URL 处的 SQLite 文件兼容?

【问题讨论】:

    标签: objective-c ios core-data


    【解决方案1】:

    您可以尝试将核心数据轻量级迁移代码包装在调度块中。这应该将其分离到后台线程,这样您就可以通过可能会杀死您的应用程序的应用程序启动看门狗。要么就是你的设备内存不足。

    【讨论】:

    • 这是看门狗——这将是一个可接受的解决方案,但为了做到这一点,我必须提前知道在我的 CoreDataStackController(例如)中——persistentStoreCoordinator 不会返回,因为它不兼容与商店在给定的 URL。
    • 你可以捕获persistantStoreCoordinator的初始化方法中的错误,然后在调度块中处理它。
    猜你喜欢
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多