2014-11-02 82 views
1

我想創建一個子對象,並通過將父對象分配給子對象中的關係將其連接到它的父對象。我使用此代碼:分配給核心數據對象中的關係似乎破壞對象

Serial *object = [NSEntityDescription insertNewObjectForEntityForName:@"Serial" inManagedObjectContext:AppDelegatePtr.managedObjectContext]; 
    NSLog(@"context is %@", object.managedObjectContext); 
    [object setValue:self.textNarrative.text forKey:@"narrative"]; 
    NSLog(@"%@",[[SMNetworkModel sharedInstance ] selectedExerciseID]); 
    [object setInExercise:(Exercise *)[[SMNetworkModel sharedInstance ] selectedExerciseID]]; 
    NSError *error; 
    if (![AppDelegatePtr.managedObjectContext save:&error]) 
    { 
     NSLog(@"Failed to save - error: %@", [error localizedDescription]); 
    } 

但是,它提供了以下的調試/錯誤:

2014-11-02 23:36:49.622 RVP[4464:139260] context is <NSManagedObjectContext: 0x7faf19fa1140> 
2014-11-02 23:36:49.623 RVP[4464:139260] 0xd000000000040000 <x-coredata://D08DF3CD-A5E0-4445-B7C4-A84448110BDA/Exercise/p1> 
2014-11-02 23:36:49.623 RVP[4464:139260] -[_NSCoreDataTaggedObjectID managedObjectContext]: unrecognized selector sent to instance 0xd000000000040000 

在上面的代碼線5中產生的錯誤。看起來,父對象id(如在調試中)以某種方式覆蓋託管實體對象中的託管對象上下文屬性。這種關係在這個實體中是一對一的關係,而一對多關係是相反的。如果我將其更改爲1:1,它也不會影響錯誤。如果我註釋掉第5行,對象會被保存,但是會作爲孤兒。

我在做什麼錯?

回答

0

它看起來像你正在做的是分配完全錯誤的關係的ID值。

核心數據不是數據庫。您不管理將對象與對方關聯的表。您將對象設置爲其他對象關係。我建議你多學習一下Core Data Relationships。

此外,請嘗試使用自己的ManagedObject子類;它消除了所有直接KVC訪問屬性,並且在眼睛上更容易一些。一旦您更熟悉Core Data,我會建議您使用mogenerator

+0

謝謝! 35年的SQL給了我一定的範式僵化!事實上,我只需要在這裏更換一行代碼,另一個代碼存儲對象而不是對象ID,這一切都會突然變爲現實。再次感謝。 – Nick 2014-11-03 11:01:20