Новый объект базовых данных не отображается в NSArrayController layoutObjects - PullRequest
4 голосов
/ 27 декабря 2010

Когда я вставляю новый объект в контекст управляемого объекта Core Data и вскоре после этого пытаюсь найти этот новый объект в NSArrayController (который связан с managedObjectContext через привязку), я не могу его найти.Я делаю создание и поиск одним способом.

Мой вопрос сейчас.Сколько времени требуется для того, чтобы новый вставленный объект появился в массиве NSOrayControllers layoutObject?

Обновление: Вот код для вставки и извлечения новых объектов

NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"];
NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:[self managedObjectContext]];
...
[[self managedObjectContext] processPendingChanges];

[arrayController fetch:nil];
NSArray* objects = [arrayController arrangedObjects]; //the new object is not present in the array

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Дело не в том, «как долго», а «в какой момент». Там достаточно различий, что важно изучить это. : -)

Обычно контроллеры массива автоматически обновляются (в этом случае повторно извлекают их содержимое) при следующем цикле выполнения, но технически «в будущем цикле выполнения». Если вы хотите, чтобы они обновились сразу после вставки чего-либо, отправьте свой MOC -processPendingChanges, а затем попросите контроллер массива -fetch:.

Первое, что вы прочитали в документации Core Data , это то, что это сложная тема о какао, обязательное знание которой включает связывание значений ключа и наблюдение значения ключа. Недостающие знания, которые привели вас к этому вопросу, можно найти в понимании KVC / KVO (и слоя привязок Cocoa).

0 голосов
/ 04 января 2011

Только что нашел исправление для этого.Я использую setSelectedObjects: метод NSArrayController, чтобы выбрать объект.Не знаю, почему я не использовал этот метод в любом случае!

...