Как получить результаты выборки CoreData в (многомерный) массив? - PullRequest
1 голос
/ 23 декабря 2011

Я хочу получить данные из нескольких строк в coredata в многомерный массив, чтобы я мог просматривать их в цикле для создания событий в календаре.Однако с точки зрения объектов не представляется возможным или нецелесообразным иметь истинный многомерный массив, поэтому я создал один NSMutableArray на столбец данных, которые я хочу использовать для атрибутов события (заголовок, примечание, время дня).

Но как мне назначить все значения для каждого из столбцов в его собственный NSMutableArray?Или я должен использовать NSDictionary для хранения значений?

Вот мой выбор из CoreData, который является довольно стандартным:

    MyAppDelegate       *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest         *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription    *entityDescription = [NSEntityDescription entityForName:@"My_List" 
                                                        inManagedObjectContext:context];
[fetchRequest setEntity:entityDescription];

NSSortDescriptor       *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"my_list_name" ascending:YES];
NSArray                *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest           setSortDescriptors:sortDescriptors];
[fetchRequest           setFetchBatchSize:20];

[sortDescriptors        release];
[sortDescriptor         release];

NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:@"my_list.cache"];

fetchedResultsController.delegate = self;
NSError *error;
BOOL success = [fetchedResultsController performFetch:&error];
if (!success) {
    //Handle the error
}

self.resultsController = fetchedResultsController;

NSArray *fetchedObjects = [fetchedResultsController fetchedObjects];

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

  for (NSManagedObject *list in context) 
{
    [ reminderTitleMutableArray addObject:my_list_List.my_list_name ];
            [ reminderTitleMutableArray addObject:my_list_List.my_list_description ];
    [ reminderTitleMutableArray addObject:my_list_List.my_list_tminus ];
}

Это правильный путь?

Спасибо

1 Ответ

1 голос
/ 24 декабря 2011

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

Было бы намного лучше использовать какую-то схему datasource, которую, я уверен, вы знаете по UITableView с, и извлекать данные для каждой даты в своем календаре, когда вынужно это.С fetchedResultsController этого довольно легко достичь с помощью NSIndexPath s или другой схемы, подходящей для вашего календаря.

...