Я пытаюсь узнать Базовые Данные (я - новичок при разработке iPhone), и чтобы сделать это, я пытаюсь получить объект от fetchedresultscontroller и NSlog, это - имя (свойство объекта). Я пытался сделать это как это:
NSArray *ar = [NSArray arrayWithArray:[fetchedResultsController sections]];
Task *t = [ar objectAtIndex:0];
NSLog(@"%@", t.taskName);
Однако приложение, разрушенное с этой ошибкой: сбои приложения с ошибкой
Завершение приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '*** - [_NSDefaultSectionInfo taskName]: нераспознанный селектор, отправленный в экземпляр 0x3d1f670'
Я с тех пор узнал, что необходимо использовать выбранное свойство объектов для этого, но затем для чего разделы? Спасибо за любую справку извините, если это - в высшей степени глупый вопрос. Я просмотрел документацию, но все еще не понимаю.
NSFetchedResultsController
может сгруппировать ваши объекты в разделы на основе указанного вами ключа. Так, например, если ваша сущность имеет свойство category
, вы можете сгруппировать свои объекты по категории
и отобразить их под заголовком для этой категории.
Каждый UITableView
(и каждый NSFetchedResultsController
) содержит по крайней мере один раздел, поэтому, даже если вы не используете эту функцию, вам все равно придется иметь дело с разделами. Если вы проверите документацию , то увидите, что объекты в свойстве section
соответствуют протоколу NSFetchedResultsSectionInfo
, который имеет объекты
], которое содержит объекты в этом разделе.
Есть два способа получить реальный объект из NSFetchedResultsController
:
id <NSFetchedResultsSectionInfo> sectionInfo = [fetchedResultsController.sections objectAtIndex:0];
Task *task = [sectionInfo.objects objectAtIndex:0];
Другой, гораздо более простой и предпочтительный способ - использовать метод objectAtIndexPath:
.
Task *task = [fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
Эти два образца эквивалентны. UIKit добавляет некоторые методы в NSIndexPath
, чтобы упростить работу с табличными представлениями и контроллерами полученных результатов. Также обратите внимание, что все методы UITableViewDataSource
и UITableViewDelegate
предоставляют вам объекты NSIndexPath
, поэтому вы можете просто передать их в objectAtIndexPath:
чтобы получить правильный объект для этой ячейки.
Apple также предоставляет достойное руководство по использованию Core Data на iPhone. Он ответит на многие ваши вопросы. К сожалению, он не охватывает подробно NSFetchedResultsController
.