2012-07-22 93 views
0

我有一個可以導入和導出數據的核心數據模型。我的應用程序的工作方式是從數據庫下載JSON文件,解析它,刷新核心數據模型,然後再次添加數據(實際上刷新本地數據模型)。核心數據直到應用程序重新啓動纔會更改

如果我對數據庫進行了更改,則更改將反映在JSON文件中,但在重新啓動(又名結束應用程序,再次打開)應用程序之前,不會反映在覈心數據模型中。

我確定它必須與我沖洗數據庫的方式有關,但我不能把它放在手指上。我在下面列出了一些代碼來提供幫助。

我使用沖洗掉數據模型的方法:

我使用,將數據添加到數據模型的代碼
- (void)resetCoreData; 
{  
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"AppWithCoreData.sqlite"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    [fileManager removeItemAtURL:storeURL error:NULL]; 

    NSError* error = nil; 

    if([fileManager fileExistsAtPath:[NSString stringWithContentsOfURL:storeURL encoding:NSASCIIStringEncoding error:&error]]) 
    { 
     [fileManager removeItemAtURL:storeURL error:nil]; 
    } 

    persistentStoreCoordinator = nil; 
    managedObjectContext = nil; 

    [self managedObjectContext]; // Rebuild Object Context  
} 

一行:

[model setValue:[dictionary objectForKey:@"eventID"] forKey:@"eventID"]; 
+0

之後您會重新提取數據嗎?也看看這個:http://stackoverflow.com/a/5770216/730701。唯一的區別是,在將上下文設置爲nil之前刪除文件,然後該用戶執行此操作。 – Adam 2012-07-22 15:52:57

+0

是的,我調用這個方法,然後重新獲取數據。它保存沒有任何錯誤。當我在設置上下文後移動這兩行後嘗試保存時,出現錯誤 無法保存:操作無法完成。 (可可錯誤134030.) – 2012-07-22 16:55:50

回答

2

通常,當您需要將更改保存到核心數據存儲區時,您需要保存它們。

爲了達到這個目的,你需要調用

NSError* error = nil; 
[managedObjectContext save:&error]; 

以這種方式改變已執行保存到磁盤。事實上,當你只是改變一個特定實體的屬性值時,它只能在內存中使用。

我想只有在下次重新啓動時才能使用這些更改,因爲在您的應用程序委託中您可以監聽applicationWillTerminate委託,並且您可以保存上下文。您是否使用Xcode模板提供的Core Data Stack?

如果可能提供更多的細節,也許我可以幫你。

希望有所幫助。

+0

對不起,我打電話保存,我只是愚蠢地把它留下。我沒有使用核心數據模板,之後我添加了Core Data。關於核心數據的其他一切工作,但這。感謝您一直以來的幫助。 – 2012-07-22 16:53:43

+0

@AlexGodbehere你能提供一些其他的細節嗎? – 2012-07-22 16:55:34

+0

好的,我有一個更新。我已經在應用程序啓動後下載了模型中的數據,但是在我通常刪除數據並添加新數據之前。結果...空。所以數據不能被保存在首位。我覺得這很奇怪,因爲它沒有報告錯誤。你還喜歡什麼其他信息? – 2012-07-22 17:16:24

相關問題