我是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個重複條目。
有沒有人有任何想法是什麼造成這種情況?
你如何創建'newManagedObject':我通過改變
0
到1
這樣解決了問題? 「重複對象」是什麼意思? (一對多的關係存儲爲NSSet,它不能包含同一個對象兩次。) –我正在使用NSManagedObject * newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:className inManagedObjectContext:self.managedObjectContext];'這似乎是正常工作。 – WeekendCodeWarrior
那麼在什麼意義上有「重複的對象」? - (順便說一句,將對象添加到多對多關係中的一種稍微簡單的方法是使用反向關係,例如'newManagedObject.parent = parentEntity;'但您的代碼也應該可以工作。) –