Я добавляю экземпляр в основные данные. Предприятие представлено NSArrayController
. Я хотел бы получить доступ к вновь добавленному экземпляру через контроллер. добавляетсяОсновные данные: Как обновить NSArrayController сразу после добавления NSManagedObject?
А и затем я пытаюсь получить к нему доступ через selectAddedObject
следующим образом:
-(void)addSkill
{
[self selectAddedObject:[NSEntityDescription insertNewObjectForEntityForName:@"Skill"
inManagedObjectContext:self.managedObjectContext]];
}
- (void)selectAddedObject:(NSManagedObject *)addedMO
{
[self.sectionArrayController setSelectedObjects:[NSArray arrayWithObject:addedMO]];
NSLog(@"Selected: %@", [self.sectionArrayController valueForKey:@"selectedObjects"]);
}
Это только кажется, работает, если добавить
[self.managedObjectContext processPendingChanges];
в качестве первой линии selectAddedObject:
. Но как только я это сделаю, документ, похоже, забыл, что ему все еще нужно сохранять, и я мог бы отказаться от приложения, не добавляя при этом автоматическое сохранение. Не хотите навязывать это пользователям!
Любые идеи о способе немедленного обновления контроллера массива каким-либо другим способом? Или, возможно, добавить объект по-другому? Несколько ранних ответов (например, Updating NSTableView when enitiy is added to core data) кажутся немного устаревшими из-за изменений в OSX.
Спасибо!
Спасибо, это выглядит очень элегантно. У меня есть проблема после попытки этого решения: 'self.sectionArrayController' по-прежнему имеет неизмененное количество объектов после фиксации! Но возвращаемое значение - 'YES'. Hmmm .... – markjs
Просто используя 'add:' на контроллере массива (в IB) также не выбирает новый объект, даже если в построителе интерфейсов не отмечено «Выбрать вставленные объекты». – markjs
Что работает, добавляет '[self.managedObjectContext processPendingChanges];'. Мне бы очень хотелось обойтись. Есть ли причина, по которой '-commitEditing' не работает, и' -processPendingChanges' делает? – markjs