Сегодня у меня возник интересный вопрос от коллеги. Сначала ответ казался простым, но потом я понял, что никогда не видел никаких документов, подтверждающих мое предположение.Неуправляемые члены NSSet в NSManagedObject сохраняют удаленные элементы при сохранении?
Учитывая NSManagedObject
, такие как Person
, который имеет отношение один-ко-многим с другим объектом, например, Friends
, а код ниже - будет friend1
и friend2
быть сохранены в хранилище данных?
NSManagedObjectContext *context = [a private context];
Person *aPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person"
inManagedObjectContext:context];
NSMutableSet *friendsSet = [NSMutableSet new];
// Create some friends in the private context
Person *aFriend1 = [NSEntityDescription insertNewObjectForEntityForName:@"Friend"
inManagedObjectContext:context];
[friendsSet addObject:friend1];
Person *aFriend2 = [NSEntityDescription insertNewObjectForEntityForName:@"Friend"
inManagedObjectContext:context];
[friendsSet addObject:friend2];
// Add these friends to aPerson
[person addFriends:friendsSet];
// Alas! aPerson decides they want better friends.
NSMutableSet *betterFriendsSet = [NSMutableSet new];
Person *aFriend3 = [NSEntityDescription insertNewObjectForEntityForName:@"Friend"
inManagedObjectContext:context];
[betterFriendsSet addObject:friend3];
Person *aFriend4 = [NSEntityDescription insertNewObjectForEntityForName:@"Friend"
inManagedObjectContext:context];
[betterFriendsSet addObject:friend4];
// Dump those old friends
aPerson.friends = nil;
// Add the new friends
[person addFriends:betterFriendsSet];
// Save
[context save:nil];
Есть ли у aperson 2 друзей или 4 в хранилище данных? Мое предположение было бы 2, так как больше нет сильных ссылок на friend1 и friend2, они должны быть выпущены. Тем не менее, основанные на данных сгенерированные аксессуры могут делать больше за кулисами и содержать в себе сильную ссылку на них, и в этом случае они будут сохраняться в хранилище данных.