Загрузка всех значений атрибута основных данных в массив - PullRequest
2 голосов
/ 06 июля 2010

У меня есть атрибут «термин», который является строкой NSS в моих основных данных «Событие». Когда табличное представление загружено, я хочу, чтобы все значения "name" были загружены в массив.

Я использовал код

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
      Event   *event  = nil;
      event = [fetchedResultsController objectAtIndexPath:indexPath];
    if(searching){
        cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
    }else{   
          if(event.term){ 
                [listOfItems addObject:event.term]; 
         }
          cell.textLabel.text = event.term;
          cell.detailTextLabel.text = event.definition;
      }
}

Проблема в том, что все термины не загружаются в список NSMutableArrayOfItems. Загружается, когда ячейки таблицы прокручиваются вниз.

Как загрузить все содержимое «term» из основных данных в массив listOfItems.

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 06 июля 2010

Скорее всего, вы ошиблись в базовых данных. Базовые данные не являются базой данных. Это граф объектов, который сохраняется в базе данных. Сказав это, ваш вопрос лучше задать как «как я могу загрузить все экземпляры объекта« Событие »и получить доступ к его свойству термина».

Для этого вы хотите создать и выполнить NSFetchRequest для объекта «Событие» без предиката.

NSManagedObjectContext *moc = ...;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:moc]];
NSError *error = nil;
NSArray *events = [moc executeFetchRequest:request error:&error];
NSAssert2(events != nil && error == nil, @"Error fetching events: %@\n%@", [error localizedDescription], [error userInfo]);

Отсюда вы можете использовать KVC для получения массива свойства name:

NSArray *namesArray = [events valueForKey:@"name"];

Что приведет к массиву с заполненной только этой строкой.

Однако, лучший вопрос: зачем вам массив, если вы отображаете все в таблице? У NSFetchedResultsController уже есть все сущности 'Event', найденные для вас; это только дисплей, который привязан к таблице. Какова ваша цель?

Обновление

Большое спасибо за подробный ответ, мистер Маркус ... Моя цель - найти определенный "термин" из основных данных, используя панель поиска. Есть ли лучший способ для этого?

Да, есть, и есть много решений этой проблемы. Вы можете получить доступ ко всем результатам из существующего NSFetchedResultsController, используя его свойство -fetchedObjects. Оттуда вы можете получить отфильтрованный массив, применив NSPredicate к этому массиву, используя -filteredArrayUsingPredicate:, и затем вы сможете использовать этот массив в результатах поиска.

Если вы выполните поиск в SO для Core Data и UISearchDisplayController, я подозреваю, что вы найдете много результатов и предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...