2012-07-17 114 views
1

我有一個問題,由於對我的一些代碼的疑惑。在NSManagedObject的數組中,我需要擺脫其中的一些。 這是(下面)我使用的代碼。我不得不說它在我的經驗範圍內起作用。所以我的問題是更確保我沒有做錯事,而不是解決現有問題核心數據 - 刪除項目

for (NSManagedObject *item in objects) { 
    if ([[item valueForKey:@"OK"] intValue]>1) { 
     [context deleteObject:item]; 
     continue; 
    } 
} 

因爲我修改陣列「物」的內容,而在它的循環,我怕我的代碼是不安全的。 當然,這一切都取決於現場背後的處理方式,我不知道。

謝謝。

回答

1

當您調用deleteObject:時,您正在標記要刪除的對象,而不是立即將其刪除,並且肯定不會將其從迭代過程中正在迭代的集合中刪除。

從文檔:

指定應從其持久性存儲中刪除時提交更改的對象。

如果檢查deleteObject:後已刪除的項目叫你將看到的物體仍然存在,但有自己的isDeleted標誌設置爲YES。下次保存NSManagedObjectContext時,該對象實際上將被刪除。

1

您僅使用您的deleteObject行標記刪除項目。爲了強制上下文執行刪除操作,請在功能底部運行此操作:

NSError *error; 
if (![context save:&error]) { 
    return; 
} 
+0

這讓事情變得非常清楚,謝謝。 – Michel 2012-07-21 01:18:31