2012-07-20 45 views
3

我的應用程序中有一項功能,用戶可以通過單擊按鈕來重置應用程序上的所有內容。在這一點上,而不是試圖刪除所有的核心數據關係(級聯刪除)等併發症,我決定真正消除使用這段代碼刪除UIManagedDocument的正確方法

-(void)cleanUpDocument 
{ 
    [[NSFileManager defaultManager] removeItemAtPath:[self.document.fileURL path] error:nil]; 
} 

這應該刪除的文件我承擔全部UIManagedDocument?但它有時會引發錯誤。而奇怪的是,當我下次嘗試重新創建文檔時,出現錯誤,提示「無法創建文件,文件已存在」。我用它來創建文檔的代碼是這樣的: -

if (![[NSFileManager defaultManager] fileExistsAtPath:[self.document.fileURL path]]) { 
    [self.document saveToURL:self.document.fileURL 
      forSaveOperation:UIDocumentSaveForCreating 
      completionHandler:nil] 
    } 

我的問題是這樣的: - 什麼是消除/刪除整個UIManagedDocument並重新開始在下次登錄成功的最好/正確的方法是什麼?

在此先感謝。

+0

你有沒有發現這個答案? – huggie 2012-11-23 09:42:48

+0

你也可以檢查這個問題:http://stackoverflow.com/questions/2375888/how-do-i-delete-all-objects-from-my-persistent-store-in-core-data/8467628#8467628 – acecapades 2014-04-06 05:50:41

回答

0

我剛剛有同樣的問題,並嘗試完全採用你的方法,只是被類似的錯誤迎接。從我收集的信息來看,刪除整個UIManagedDocument並不是最好的(或者至少是不必要的),而只是底層的持久性存儲(當然,同時保持這個managedObjectContext同步)。

這個答案爲我工作:https://stackoverflow.com/a/8467628/671915

0

的問題是,您要移除文件,而某些對象仍持有對它的引用,並保持它打開。

正確的解決辦法是要做到這一點:

[document closeWithCompletionHandler:^(BOOL success){ 
    if([[NSFileManager defaultManager] fileExistsAtPath:[document.fileURL path]]){ 
     [[NSFileManager defaultManager] removeItemAtURL:document.fileURL error:nil]; 
    } 
相關問題