Зарегистрированные объекты NSManagedObjectContext не будут возвращать ничего, пока выборка не будет выполнена заранее - PullRequest
1 голос
/ 21 сентября 2011

Cheers,

У меня проблема с основными данными, я думаю, я просто смотрю в неправильном направлении снова.

Мой managedObjectContext вернет пустой NSSet, если я вызовуregisteredObjects на это.Однако если я выполню извлечение заранее, он вернет те же объекты, что и извлечение, сделанное всего минуту назад.

Многопоточность не происходит.

Вот что я делаю:

[self setupContext]; // This will set up managedObjectContext, which is a property of this class

// Fetching...    

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *foo = [NSEntityDescription entityForName:@"Foo" inManagedObjectContext:managedObjectContext];
[request setEntity:foo];

NSError *fetchError = nil;
NSArray *fetchResults = [managedObjectContext executeFetchRequest:request error:&ftchError];

NSLog(@"Fetch returned %i objects.", [fetchResults count]);

[request release];

// Done fetching...

NSArray *allObjects = [[managedObjectContext registeredObjects] allObjects];

NSLog(@"Context contains %i objects...", [allObjects count]);

В магазине 30 предметов.Если я выполню код выше, оба NSLogs сообщат о пяти объектах.Если я уберу часть выборки между двумя комментариями, она сообщит о нулевых объектах для всего контекста.

Обратите внимание, что я ни в коем случае не фиксирую и не изменяю содержимое контекстов.

Должен ли яНужно сначала заставить контекст обновляться?Я никогда не делал этого раньше, и я не помню, чтобы registeredObjects терпел неудачу со мной, как это в других случаях, в первую очередь.

Любые предложения приветствуются!Toastor

1 Ответ

7 голосов
/ 21 сентября 2011

Вы можете быть озадачены тем, что означает registeredObjects. Это набор объектов, которые в данный момент находятся в NSManagedObjectContext. Это не набор объектов в магазине, а только объекты в контексте. Если вы не получили или иным образом не зарегистрировали объекты в контексте, они не будут в registeredObjects.

...