Я помещаю NSFetchedResultsController в мой код, чтобы я получил это хорошее автоматическое разделение данных моего табличного представления.
Итак, я провожу тест, чтобы убедиться, что все работает правильно. У меня есть единственная сущность Book в моем постоянном магазине. Сначала я выполню выборку по-старому, затем попытаюсь использовать NSFetchedResultsController. Разница между двумя блоками кода составляет всего 2 строки.
Код без NSFetchedResultsController:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:kBookEntityName inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
//The following 2 lines will be replaced by the NSFetchedResultsController
NSMutableArray *mutableFetchResults = [[[self.managedObjectContext executeFetchRequest:request error:nil] mutableCopy] autorelease];
Book *result = (Book*)[mutableFetchResults objectAtIndex:0];
NSString* title = [result valueForKey:@"title"];
NSString* priority = [result valueForKeyPath:@"priority.name"];
[request release];
Теперь я заменяю в строках NSFetchedResultsController:
NSFetchedResultsController* fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"title" cacheName:@"BookList"];
Book *result = (Book*)[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
Кажется довольно сухим. Первый блок кода правильно выбирает единый объект Book. Однако код с NSFetchedResultsController этого не делает. Вместо этого он возвращает ноль.
Мой вопрос: правильно ли я настраиваю NSFetchedResultsController в этом примере?
(обратите внимание, что свойство fetchedObjects объекта NSFetchedResultsController также равно nil)