2014-09-11 42 views
0

之外這是My previous questionHOWTO創造核心數據實體MagicalRecord的saveWithBlock

一個遵循實質是,我需要一個類來創建一個核心數據對象,並將其傳遞給另一個類,然後將其保存。這種情況很複雜,因爲我們試圖使用MagicalRecord,堅持創建不同的上下文。下面是顯示了問題的代碼削減塊(這是在一個單元測試):

__block HLMReferenceData *referenceData = [HLMReferenceData MR_createEntity]; 
__block NSManagedObjectID *objId = nil; 
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){ 
    HLMReferenceData *localReferenceData = [referenceData MR_inContext:localContext]; 
    [localContext obtainPermanentIDsForObjects:@[localReferenceData] error:NULL]; 
    objId = localReferenceData.objectID; 
} 
        completion:^(BOOL success, NSError *saveError){ 
         referenceData = (HLMReferenceData *)[[NSManagedObjectContext defaultContext] existingObjectWithID:objId error:NULL]; 
        }]; 

本質上,我們正在創建的對象,將它傳遞給一個MR保存調用,然後重新取回該對象,以便我們可以繼續使用它。

這會在執行... MR_inContext:localContext];方法時拋出核心數據133000錯誤。這似乎源於主要背景沒有保存該記錄並且仍然具有臨時ID的事實。

真的需要一些幫助,因爲我們需要能夠在MR的saveWithBlock代碼之外創建對象。

+0

您是否找到解決方案?我有相同的問題... – blackjacx 2014-10-17 09:13:32

+0

我們發現了一個我們不喜歡的「黑客」,但是很有效。我們基本上重新編碼以避免使用多個上下文的MR。在其他地方,我們手動管理MR之外的對象。簡而言之,MR並不是它自稱的魔力子彈。 – drekka 2014-10-19 06:51:18

回答

0

假設:您正在使用MagiaclRecord 2.3beta5。如果沒有,請發佈您的版本。

您實際上是在MagicalRecord的-saveWithBlock:之外創建對象。你的第一行就是這樣。它在MR_defaultContext中創建一個對象,但該對象不會被保留。它只存在於MR_defaultContext中。如果你想持久化對象,那麼你可以簡單地做:

[referenceData.managedObjectContext MR_saveToPersistentStoreAndWait]; // or a variant of 

你可以通過referenceData到另一個對象,的viewController,不管,即使沒有救了它。