2012-08-30 93 views
2

我想在用戶設置當前模型時重置我的核心數據數據庫。核心數據沒有正確重置數據庫

我已經嘗試過各種選擇,但都沒有正確工作。

我希望在添加任何新數據之前刪除Core數據及其所有數據(包括持久數據)。

我一直在使用SQLite數據庫瀏覽器版本2.0b1來檢查數據是否已被正確刪除。在運行每個測試之前,我也重置了模擬器。

我正在尋找一個簡潔的解決方案,我已經搜索了超過stackoverflow找到一個正確的方法。

該解決方案導致數據庫被完全刪除,但沒有創建新的數據庫。 https://stackoverflow.com/a/11812997/1565615

該解決方案並沒有刪除所有的數據,因爲之前的會話仍然存在以及剛剛創建的數據。 https://stackoverflow.com/a/1078306/1565615

回答

2

我使用它是這樣的:

  1. 刪除coreData
  2. 所有值保存的背景下,這樣的價值觀是真正刪除。
  3. 保存您的新值並再次保存上下文。

  1. 我使用這個代碼從每個實體刪除值:

NSError *error = nil; 

NSManagedObjectContext *context = [self managedObjectContext]; 
NSFetchRequest *fetchREntityUser   = [[[NSFetchRequest alloc] init] autorelease]; 
NSEntityDescription *entityUser   = [NSEntityDescription entityForName:@"EntityUser" inManagedObjectContext:context]; 

[fetchREntityUser   setEntity:entityUser]; 


NSArray *fetchedObjUser   = [context executeFetchRequest:fetchREntityUser error:&error]; 

if (error) { 
    XLog(@"deleteCoreDataEntitys Error: %@", [error localizedDescription]); 
} 


for (NSManagedObject *CDentityUser in fetchedObjUser) { 
    [context deleteObject:CDentityUser]; 
} 


[context save:&error]; 
+0

2012-08-14 11:49:07.953 NameOfApp SSI [ 2019:c07] ***由於未捕獲異常'NSInternalInconsistencyException',原因:'+ entityForName:找不到實體名稱的NSManagedObjectModel' CurrentManagement' ***第一擲調用堆棧: (0x165b022 0x1350cd6 0x1e6d47 0x6aff 0x6e68 0x6ea5 0x165ce99 0x4b614e 0x4b60e6 0x55cade 0x55cfa7 0x55c266 0x4db3c0 0x4db5e6 0x4c1dc4 0x4b5634 0x2467ef5 0x162f195 0x1593ff2 0x15928da 0x1591d84 0x1591c9b 0x24667d8 0x246688a 0x4b3626 0x1ced 0x1c55) 終止叫做拋出異常(LLDB ) – StackRunner

+0

這就是當我使用該代碼時也會發生什麼Autorelease不是ARC的一部分,所以我刪除它,什麼是XLog?再次感謝。 – StackRunner

+1

將XLog更改爲NSLog。或者完全刪除該行,你不需要它。 XLog是NSLog的更好方式。請參閱此處:http://stackoverflow.com/a/12194649/558150。你有沒有刪除sqlite文件?你的模型找不到。檢查實體的正確名稱。 CurrentManagement是你的實體或你的sqlite文件的名稱? **它應該是你的實體**的名稱。 – brush51