Получение разделов UITableView из NSFetchedResultsController с использованием отношения «ко многим»

Моя модель основных данных выглядит так:

article <--->> category 

Можно ли даже удаленно использовать NSFetchedResultsController для создания UITableView, который выглядит примерно так?

 Category 1 - Article A - Article B - Article C Category 2 - Article A - Article D - Article E - Article F Category 3 - Article B - Article C 

В частности, меня интересует случай (edge?), В котором каждый раздел UITableView имеет уникальный заголовок (например, «Категория 1», «Категория 2»), но тот же объект может существовать в нескольких разделах (например, статья A существует как в категории 1, так и в категории 2).

Я просмотрел документы Core Data Data Data и провел здесь два дня, но, к сожалению, вам не удавалось выяснить, возможно ли это, не говоря уже о том, как его реализовать. Спасибо за любую помощь или указатели на ранее ответивший вопрос. Я, конечно, не мог его найти.

2 Solutions collect form web for “Получение разделов UITableView из NSFetchedResultsController с использованием отношения «ко многим»”

Да, это легко, хотя есть миллион способов сделать это.

Контроллер вашего представления должен быть «источником данных» UITableView и возвращает информацию о количестве строк, которые есть, а затем о содержимом каждой отдельной строки.

В представлении таблицы есть понятие «раздела», вы можете выбрать один для каждой категории.

Например, вы можете создать NSFetchedResultsController чтобы найти категории, которые хотите отобразить, и использовать их для заполнения разделов представления таблиц, а затем каждая категория будет иметь отношения «многие ко многим», чтобы заполнить строки в каждом разделе.

Что-то вроде этого должно заставить вас начать (если ваши категории и объекты статей содержат свойство title ):

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // return the number of categories [[self.categoryResultsController fetchedObjects] count]; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { // return the title of an individual category [[self.categoryResultsController.fetchedObjects objectAtIndex:section] valueForKey:@"title"]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // return the number of articles in a category MyCategory *category = [self.categoryResultsController.fetchedObjects objectAtIndex:section]; return category.articles.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // fetch a cached cell object (since every row is the same, we re-use the same object over and over) static NSString *identifier = @"ArticleCellIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease]; } // find the category and article, and set the text of the cell MyCategory *category = [self.categoryResultsController.fetchedObjects objectAtIndex:indexPath.section]; cell.textLabel.text = [[category.articles objectAtIndex:indexPath.row] valueForKey:@"title"]; return cell; } 

Вы можете прочитать документацию по этим методам, чтобы выяснить, как ее настроить дальше.

У меня NSFetchResultsController соблазн отказаться от NSFetchResultsController потому что я не вижу здесь большой пользы, но я не слишком много думал об этом, поэтому я мог ошибаться.

Что вы можете сделать, так это:

  1. Выполните запрос на выборку для всех category и поместите их в NSArray . Это будут ваши разделы.
  2. В поле count count count count
  3. Для подсчета строк возвращаем счетчик self.category.articles

Вот пример кода для шага 2 + 3

 // 2 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; { return [self.categories count]; } // 3 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; { return [[[self.categories objectAtIndex:section] articles] count]; } 
  • Добавление subviews в tableHeaderView с UISearchBar в iOS7 misbehaves
  • как добавить UINavigationController UIToolbar в верхнюю часть представления не внизу
  • как реализовать UITableViewController с несколькими прототипными ячейками программно в быстром
  • ошибка с scrollToRowAtIndexPath
  • iOS: выбор через UITextView на пользовательском UITableViewCell
  • Как реализовать UISearchController в UITableView - SWIFT
  • ios 8 Swift - TableView со встроенным CollectionView
  • Получить ссылку на ячейку под heightForRowAtIndexPath: в iOS 8
  • как прокручивать ячейки в uitableview влево и вправо, показывая изображение слева и изображение справа
  • UITableViewCells с перекрытием UIButton при прокрутке
  • Обновление таблиц «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество строк?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.