2013-07-25 73 views
0

我在我的應用程序中使用魔法記錄。魔法記錄級聯刪除(truncateAll)不刪除

我有關係...

Competition <-->> League 

Competition可以有很多Leagues。 A League只能有一個Competition

Competition to League刪除規則設置爲Cascade。反向刪除規則設置爲Nullify

我希望發生的是如果我刪除Competition那麼屬於它的所有Leagues也被刪除。 (我已經在以前的應用程序中成功地使用了它)。

我做測試...

  1. 下載並插入所有的比賽和聯賽。
  2. 記錄所有具有競賽名稱的聯賽。

    NSArray *leagues = [League findAll]; 
    for (League *league in *leagues) 
    { 
        NSLog(@"%@ - %@", league.name, league.competition.name); 
    } 
    
    e.g. Man UTD - Premier League 
    
  3. 與競爭格局運行下面的代碼...

    [Competition truncateAll]; 
    
  4. 登錄的所有聯賽。

    e.g. Man UTD - (null) 
    

我期待這個刪除Leagues還有Competitions

我的假設是否正確?爲什麼不這樣做?

+1

你如何「記錄與競賽名稱的所有聯賽」?你再次獲取它們還是使用現有的指向對象的指針? - 請注意,刪除規則僅適用於「保存」上下文或調用「processPendingChanges」。 –

+0

編輯顯示日誌代碼。我認爲truncateAll做到了?我很愚蠢。我將截斷包裝在一個保存塊中,並且工作正常。謝謝:) – Fogmeister

回答

3

當管理對象 上下文爲保存processPendingChanges時,將應用關係刪除規則。

如在implementation可以看出,MagicalRecord方法MR_truncateAll呼籲實體的所有對象 deleteObject,但不保存上下文。

+0

非常感謝。我確實知道,只是大腦褪色。 – Fogmeister

+0

它也刪除數據庫嗎? – user1007522

+0

@ user1007522:否,它刪除給定實體的所有對象,例如'[Car truncateAll];'從數據庫中刪除所有Car對象。可以有其他不受影響的實體。 SQLite文件本身不會被刪除。 –

0

我同意馬丁R.

只需添加以下行後

[Competition truncateAll]; 

[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; 

你會好到哪裏去! :)