Основные данные NSSet Проблема - PullRequest
1 голос
/ 14 марта 2012

Я автоматически сгенерировал класс NSManagedObject для данных с сердечником, и я пытаюсь отобразить все номера телефонов определенного человека.Я пытаюсь отобразить это в своем классе табличного представления, чтобы заполнить таблицу.

Персона к числам является отношением один ко многим, и числа находятся в наборе, который я сделал методом addNumbersObject.Я просто не понимаю, как получить это в fetchresultscontroller и отобразить их в табличном представлении.

В настоящее время я просто выбираю всех людей.

Есть идеи или предложения?

Базовый класс данных:

@class Number

@interface Person : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSSet *numbers;

@end

@interface Person (CoreDataGeneratedAccessors)

- (void)addNumbersObject:(Number *)value;
- (void)removeNumbersObject:(Number *)value;
- (void)addNumbers:(NSSet *)values;
- (void)removeNumbers:(NSSet *)values;

@end

Класс табличного представления:

- (NSFetchedResultsController *)fetchedResultsController 
{    
    if (_fetchedResultsController != nil)
        return _fetchedResultsController;

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:_context];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:@"Root"];

    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    [fetchRequest release];
    [theFetchedResultsController release];

    return _fetchedResultsController;      
}

Ответы [ 2 ]

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

Попробуйте использовать предикат в вашем fetchRequest.

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

Чтобы получить все телефонные номера для одного конкретного человека в одном виде таблицы:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Number" inManagedObjectContext:_context];

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"person.name == %@", personName]]; //Assuming person.name is unique

Затем отсортируйте номер телефона этого человека так, как вы этого хотите.

0 голосов
/ 14 марта 2012

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

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

  1. Установить Number в качестве сущности для вашего запроса на выборку.
  2. Установить "person.name" в качестве ключа сортировки. (Возможно, вы захотите добавить дескриптор второго рода, чтобы числа для каждого человека были в разумном порядке.)
  3. Также установите "person.name" в качестве пути к ключу имени секции.
  4. Реализуйте ваш источник данных табличного представления -tableView:titleForHeaderInSection: таким образом:

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo name];
    }
    
...