Просто столкнитесь с хитрой проблемой NSFetchedResultsController.
Следующий код отлично работает во всех случаях, КРОМЕ первой записи в базу данных Core Data, когда она сообщает о 2 строках!
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
numberOfRows = [sectionInfo numberOfObjects];
Если я добавлю дополнительные записи, они будут указаны правильно.
И если я удаляю обе эти 2 начальные строки, все работает нормально.
Есть предложения?
Если это поможет, используя:
-com.apple.CoreData.SQLDebug 1
Я вижу, что было 1 INSERT и 2 SELECT.
Кроме того, эта проблема, по-видимому, не возникает, если я уже посетил представление, содержащее код NSFetchedResultsController (т.е. перед выполнением INSERT).
====
ОБНОВЛЕНИЕ 1:
Интересно, поможет ли эта прогулка по коду ...
1. ViewController A запускает фоновую NSOperation, которая выполняет загрузку
2. По завершении он отправляет уведомление в AppDelegate
3. Когда AppDelegate получает это уведомление, он импортирует данные (выполняя проверку, чтобы убедиться, что они находятся в главном потоке, прежде чем делать это)
Вот соответствующий бит кода importerDidSave (откуда был взят этот метод):
- (void)importerDidSave:(NSNotification *)saveNotification {
NSLog(@"In importerDidSave...");
if ([NSThread isMainThread]) {
NSLog(@"... on Main Thread.");
NSLog(@"Number of NSFetchedResultsController rows BEFORE: %d", [[[fetchedResultsController sections] objectAtIndex:0] numberOfObjects]);
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
NSLog(@"Number of NSFetchedResultsController rows AFTER: %d", [[[fetchedResultsController sections] objectAtIndex:0] numberOfObjects]);
который выводит:
... on Main Thread.
Number of NSFetchedResultsController rows BEFORE: 1
Number of NSFetchedResultsController rows AFTER: 3