2013-08-31 64 views
2

我是Core Data和objective-c的新成員。我正在開發一個項目,從Web服務中獲取JSON數據並將其與核心數據同步。 我成功地遵循了這個tutorial,並且能夠毫無問題地將JSON轉換爲核心數據。 我遇到麻煩的是更新與多對多關係相關的NSSet。到目前爲止,我可以更新它,但是這樣做是爲了在集合中創建重複條目。例如,我嘗試使用Xcode的生成我的自定義ManagedObject ENTITY1訪問方法:Core Data To-Many Relationship在向父實體添加對象時創建重複項

Entity1<-->>Entity2<-->>Entity3 

我使用此代碼的ENTITY2對象添加到ENTITY1

NSNumber *parentIdNumber = [record valueForKey:@"parent_id"]; 
    NSArray *parentIdArray = [NSArray arrayWithObject:parentIdNumber]; 
    NSArray *parentEntityArray = [self managedObjectsForClass:@"Entity1" sortedByKey:@"id" usingArrayOfIds:parentIdArray inArrayOfIds:YES]; 
    Entity1 *parentEntity = [parentEntityArray lastObject]; 
    [parentEntity addEntity2Object:(Entity2 *)newManagedObject]; 

在運行時查看每個變量之後,我已經確定,直到最後一行,一切都正常工作。當我將Entity2添加到Entity1時,它實際上添加了該對象。但是,當我嘗試添加3個不同的Entity2對象時,它似乎在Entity1中創建了3個重複的Entity2對象。這3個重複項是添加的Entity2的最後一個實例。

我也試過使用這個答案的方法:https://stackoverflow.com/a/5370758/2670912。它看起來像這樣:

NSNumber *parentIdNumber = [record valueForKey:@"parent_id"]; 
    NSArray *parentIdArray = [NSArray arrayWithObject:parentIdNumber]; 
    NSArray *parentEntityArray = [self managedObjectsForClass:@"Entity1" sortedByKey:@"id" usingArrayOfIds:parentIdArray inArrayOfIds:YES]; 
    Entity1 *parentEntity = [parentEntityArray lastObject]; 
    NSMutableSet *entity2Set = [parentEntity mutableSetValueForKey:@"entity2"]; 
    [entity2Set addObject:newManagedObject]; 

這樣做除了沒有獲得加入第三對象的3個重複條目相同的重複條目的結果,我得到添加的第一個對象的3個重複條目。

有沒有人有任何想法是什麼造成這種情況?

+0

你如何創建'newManagedObject':我通過改變01這樣解決了問題? 「重複對象」是什麼意思? (一對多的關係存儲爲NSSet,它不能包含同一個對象兩次。) –

+0

我正在使用NSManagedObject * newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:className inManagedObjectContext:self.managedObjectContext];'這似乎是正常工作。 – WeekendCodeWarrior

+1

那麼在什麼意義上有「重複的對象」? - (順便說一句,將對象添加到多對多關係中的一種稍微簡單的方法是使用反向關係,例如'newManagedObject.parent = parentEntity;'但您的代碼也應該可以工作。) –

回答

0

我使用的代碼snippit竟然正常工作。問題是當我在UITableView中顯示數據時,它正確地記錄了NSSet中的實體數量,從而顯示了正確的單元數量。但是,我有一個代碼:

NSSet *entitiesSet = [self.selectedEntity1 valueForKey:@"entity2"]; 
    NSArray *entities = [entitiesSet allObjects]; 
    Entity2 *entity = [entities objectAtIndex:[indexPath indexAtPosition:0]]; 

這促使該小區只顯示在NSSet的最後一個對象使它看起來像重複。

Entity2 *entity = [entities objectAtIndex:[indexPath indexAtPosition:1]]; 
相關問題