2012-01-27 37 views
0

我使用核心數據來維護持久性存儲,並且數據庫可能增長得相當大。具有iPad 1上較大數據庫的用戶無法及時完成輕量級遷移,以便在該應用被iOS殺死之前完成該過程。如何遷移核心數據持久性存儲而不在iOS上終止進程?

我想要做的是每次服務器啓動時,檢查數據庫是否需要遷移(我無法在NSPersistentStoreCoordinator上找到此方法),如果它確實保持服務器啓動過程,直到數據庫被升級並在屏幕上顯示一個微調,然後在服務器啓動過程中繼續前進。這樣做的最好方法似乎是在服務器啓動方法中添加 - (BOOL)upgradeStoreNeedsUpgrade方法,但我找不到檢查的方法。我沒有看到NSPersistentStoreCoordinator或NSPersistentStore上的方法檢查給定URL中的數據庫與給定的託管對象模型的兼容性。

我的解決方案是否正確,如果是這樣,我如何檢查託管對象模型是否與給定URL中的SQLite文件兼容?

回答

1

您可以嘗試將核心數據輕量級遷移代碼包裝在調度塊中。這應該旋轉到後臺線程,所以你可以通過應用程序啓動看門狗這可能會殺死你的應用程序。無論是或者你正在運行的設備內存不足。

+0

這是看門狗 - 這將是一個可以接受的解決方案,但爲了這樣做,我必須事先知道在我的CoreDataStackController(例如) - persistentStoreCoordinator不會返回,因爲它與商店不兼容給定URL。 – refulgentis 2012-01-27 02:27:00

+0

您可以捕獲位於persistantStoreCoordinator的初始化方法中的錯誤,然後稍後在調度塊中處理它。 – MobileOverlord 2012-01-27 18:09:53