Поместите значения Core Data в массив - PullRequest
0 голосов
/ 28 марта 2012

Мне нужно поместить значения, полученные с помощью запроса извлечения из моего основного графа данных, в массив, но я не совсем уверен, как это сделать.

Я использую следующее для получения:

    NSString *entityName = @"Project"; // Put your entity name here
        NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);

        // 2 - Request that Entity
        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];

        // 3 - Filter it if you want
        request.predicate = [NSPredicate predicateWithFormat:@"belongsToProject = %@", _selectedProject];

        // 4 - Sort it if you want
        request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"dateTaken"
                                                                                         ascending:YES
                                                                                          selector:@selector(localizedCaseInsensitiveCompare:)]];
        // 5 - Fetch it
        self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                            managedObjectContext:self.managedObjectContext
                                                                              sectionNameKeyPath:nil
                                                                                       cacheName:nil];


[self performFetch];

Как видите, я фильтрую значения, которые возвращаются, используя NSPredicate.

Как я могу получить эти значения в массив, а также иметь возможность выбирать отдельные атрибуты для объекта, когда они находятся в массиве, например, project.description или project.name?

Благодаря Eimantas у меня есть объекты в массиве, однако мне все еще нужно сделать две вещи:

  1. Перебрать массив и вывести данные в некоторый HTML
  2. Индивидуально выбрать атрибуты из массива, например, описание проекта.

Я использую следующее для цикла, чтобы сделать первое:

for (int i=0; i < [projectListArray count]; i++) 
{
        NSString *tmp = (NSString *)[projectListArray objectAtIndex:i];
}

Однако это возвращает ошибку:

-[Project length]: unrecognized selector sent to instance 0x1b9f20
2012-03-28 10:48:35.160 Project App[3973:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Project length]: unrecognized selector sent to instance 0x1b9f20'

Похоже, что я не могу увеличивать?

1 Ответ

1 голос
/ 28 марта 2012

[self.fetchedResultsController fetchedObjects] возвращает массив извлеченных объектов.

обновление

Лучше использовать быстрое перечисление, а не петлю for:

for (Project *project in projectListArray) {
    NSString *projectDescription = [project valueForKey:@"description"];
}

Вы получаете исключение, потому что вы приводите объект к NSString, в то время как это указатель на (я предполагаю) Project управляемый объект.

...