2011-12-29 82 views
3

我有一個NSManagedObject與另一個NSManagedObject的多對多關係。CoreDataGeneratedAccessors刪除對象似乎並沒有刪除

在創建NSManagedObject期間,我可以使用生成的訪問器的removeNotesObject,並且刪除工作正常。我可以創建一個對象添加到父對象,保存對象,刪除對象,然後再次保存。當我獲取這個父對象時,我創建和刪除的對象仍然被刪除。

但是,在添加對象然後保存它(但不要刪除並保存之後)然後獲取它之後,我似乎無法刪除先前創建的對象。我正在使用生成的訪問器來嘗試刪除該對象,該對象似乎可以正常工作,但是當我再次獲取該對象時,該對象尚未被刪除。

(注:添加的對象做的工作,所以它不是與節約問題)

要刪除我檢索集對象,並選擇我要刪除的對象的對象。然後我刪除的對象

NSSet *notes = summary.notes; 
NSSet *oldNotes = [notes objectsPassingTest:^(id obj,BOOL *stop){ 
    Note *oldNote = (Note *)obj; 
    BOOL sameRow = (oldNote.row == newNote.row); 
    BOOL sameColumn = (oldNote.column == newNote.column); 
    BOOL success = (sameRow && sameColumn); 
    return success;}]; 
[summary removeNotes:oldNotes]; 

我已經嘗試使關係相反刪除沒有刪除它們的對象。我也嘗試了不同的刪除規則(級聯和無效),這再次無效。最後,我試圖分開移除每個對象,並在從父對象中刪除每個對象後再從該上下文中刪除,而這又不幸地不起作用。

我認爲這個問題必須與它是一個獲取對象有關。如果有人能幫助我,我會非常感激,因爲我想不出任何其他方式來測試或解決這個問題。

回答

0

上述代碼不起作用的原因是==實際上不會比較NSNumber。相反,你需要調用'isEqualTo:'。我想,在它保存之前檢查地址,然後纔開始工作。更重要的是,它在NSSet中返回一個對象,因此似乎正在工作。在調試過程中,不清楚對象是什麼,但顯然不是我需要的。

1

你需要做的

NSManagedObjectContext * moc = .......; 
[moc deleteObject:note] 

編輯:生成的訪問只需從關係中移除對象中的核心數據,但不會永久刪除對象。這很有意義,因爲您可能有一個NSManagedObject通過關係與多個其他NSManagedObject關聯。

編輯:以上述方式刪除將調用刪除規則。我建議你仔細檢查他們是否正確設置。

+0

感謝您的建議。我在刪除對象後嘗試使用'deleteObject',但在暫時刪除對象後,我不會在刪除對象後將其刪除。至於刪除規則,我目前已將刪除規則設置爲級聯,但不起作用,並且無效也不起作用。 – Theo 2011-12-29 22:11:41

+1

你如何重新提取它?您可能需要保存NSManagedObjectContext。在保存managedObjectContext之前,更改不會持久保存到磁盤。 – lorean 2011-12-29 22:17:43

+0

是的,我想確保它是絕對保存的,因爲我已經同時添加了對象和刪除的對象,然後保存。當我獲取對象時,新對象仍然被添加,但其他對象未被刪除。 – Theo 2011-12-29 23:22:48