Базовые отношения данных - отображение только тех значений, которые есть в определенных объектах - PullRequest
0 голосов
/ 05 марта 2012

Это простой вопрос, но я не могу найти ответ.

Я создаю приложение, которое хранит данные о проектах и ​​людях, которые хранятся в базе данных SQLite с использованием Core Data.

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

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

- (void)setupFetchedResultsController
{
    // 1 - Decide what Entity you want
    NSString *entityName = @"People"; // 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:@"people.name = someones name"];

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


    [self performFetch];
}

Ответы [ 2 ]

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

Прежде всего, я буду считать, что ваша процедура хранения правильная, и вы правильно настраиваете свои отношения.

Во-вторых, если вы хотите собирать людей в конкретном проекте, самый простой способдля этого можно настроить проект в качестве объекта для выборки.

Таким образом, все, что вам нужно сделать, это настроить предикат для желаемого проекта, и из этого управляемого объекта вы должны иметь NSSet длялюди в этом проекте.Из этого набора вам решать, как вы хотите обрабатывать информацию.

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

Вам нужен предикат, который действует как фильтр. См. Документы по NSPredicate.

Предикат должен ссылаться на интересующий вас проект. Из небольшого количества кода, который вы показали, вы можете попробовать что-то вроде этого (детали зависят от вашей собственной реализации).

request.predicate = [NSPredicate predicateWithFormat:@"people.project = %@", projectName"];
...