Получение разделов 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]; } 
  • Swift UITableView удаляет выбранную строку и любые строки над ней
  • Пользовательский заголовок UITableView (например, приложение FoodSpotting)
  • swift 3.0 множественный выбор с выбором всей ячейки
  • Swift: tableView.reloadData () слишком медленный
  • Сортировка UITableView по расстоянию
  • Показать MKMapView в UITableViewCell без замедления интерфейса
  • Как получить уведомление о запуске и окончании перемещения UITableViewCell
  • Почему UIButton не показываетTouchWhenHighlighted работают, когда кнопка находится в UITableViewCell?
  • Как мы можем динамически добавлять новую ячейку между двумя данными ячейкой в ​​TableView?
  • iphone: uitableview: содержимое изменения ячейки при прокрутке
  • Как добавить UIRefreshControl на нижнем уровне UITableView?
  • Interesting Posts

    iOS UIAlertController полужирная кнопка изменена в 8.3

    Остановка модального UIViewController от вращения

    Можете ли вы установить как Xcode 3, так и Xcode 4 preview 6?

    Предотвратите лигатуры в Safari (Mavericks / iOS7) через CSS

    Строка с CGBitmapContext слишком медленная

    Реализация функции видеовызова с использованием facetime (не может вернуться к приложению при завершении вызова)

    Многостраничная загрузка Alamofire 4 с заголовком

    NS_PROTOCOL_REQUIRES_EXPLICIT_IMPLEMENTATION не бросает предупреждение

    NSJSONSerialization от NSString

    «Объединить работу с высоким разрешением» в XCode 4?

    SKPhysics: Сделал веревку, почему она сломается?

    Как хранить любимых с помощью Firebase

    iOS Objective-C: несбалансированные вызовы для перехода к началу / концу отображения для <GKModalRootViewController>

    Массив массива объектов для словаря в Swift

    Любой способ вытащить ключ сеанса из токена доступа, который был возвращен Facebook iOS SDK?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.