У меня возникают проблемы с повторяющимися объектами одного и того же объекта в одном контексте при использовании двух контекстов управляемых объектов.
Рассмотрим следующий код:
[childMOC performBlockAndWait:^{
// CREATE PERSON IN CHILD MOC
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person"
inManagedObjectContext:childMOC];
person.name = @"Ben";
// SAVE CHILD MOC TO PUSH CHANGES TO MAIN MOC
[childMOC save:nil];
NSManagedObjectID *personID = person.objectID;
[mainMOC performBlockAndWait:^{
// SAVE MAIN MOC TO PERSIST THE PERSON AND REPLACE ID TO PERMANENT
[mainMOC save:nil];
// GET THE PERSON IN THE MAIN MOC
Person *personInMainContext = (Person*)[mainMOC objectWithID:personID];
// GET THE PERSON'S NEW PERMANENT ID
NSManagedObjectID *personIdAfterSaveToPersistentStore = personInMainContext.objectID;
[childMOC performBlockAndWait:^{
// GET THE PERSON IN THE CHILD MOC WITH ITS NEW PERMANENT ID
// (this is common when sending the id from mainMOC to childMOC)
Person *samePersonFetchedFresh = (Person*)[childMOC objectWithID:personIdAfterSaveToPersistentStore];
// THE PERSON OBJECTS SHOULD BE EXACTLY THE SAME BECAUSE THE MOC GUARANTEES UNIQUING
samePersonFetchedFresh.name = @"Jerry";
NSLog(@"%@ & %@", person.name, samePersonFetchedFresh.name);
// OUTPUT: Ben & Jerry
// NOT THE SAME?!
}];
}];
}];
Это означает, что объект, созданный в дочернем MOC, теряет свою уникальную способность при сохранении в основном MOC/постоянном хранилище.
Может ли кто-нибудь объяснить, почему uniquing не работает в этой ситуации?