我正在爲我的應用程序開發備份/恢復系統,其中用戶可以下載核心數據存儲庫(sqlite文件)的備份版本並替換當前使用的數據存儲與下載的文件。但是,一旦用戶下載文件並替換當前的數據存儲,則沒有任何數據看起來已經更新。但是,當應用程序退出&重新啓動時,恢復的數據可用。我如何強制我的應用程序重新加載核心數據存儲的文件?在應用程序運行時替換核心數據sqlite文件,數據不會更新
我試圖從我的UIViewController其恢復數據,像這樣訪問應用程序的委託,以重建核心數據堆棧和導航堆棧傳播完成它在所有視圖控制器:
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
app.managedObjectContext = nil;
app.persistentStoreCoordinator = nil;
app.managedObjectModel = nil;
managedObjectContext = [app managedObjectContext];
NSArray *controllers = [self.navigationController viewControllers];
UIViewController *c;
for (int i = 0; i < [controllers count]; i++) {
c = [controllers objectAtIndex:i];
[c setManagedObjectContext:managedObjectContext];
}
但這不工作,只當我回到根視圖控制器引發以下錯誤:'The NSManagedObject with ID:0x5d79060 <x-coredata://D8E73D64-C9BA-4CFA-9213-F8BD61749155/MyObject/p2> has been invalidated.'
有誰知道如何強制應用程序重新加載數據,並開始與新的數據存儲文件的工作?
感謝您的回答。這很好。你知道在這種情況下如何處理版本控制嗎?我試過用舊版本替換sqlite文件,它給了我一個「無法找到源存儲模型」的錯誤。 – 2011-10-01 23:20:44
您需要明確版本的模型文件。 Xcode有工具可以做到這一點 - 尋找添加模型版本到現有的'xcdatamodel'的選項。 – Tim 2011-10-02 00:43:21