Вопрос по – запросить выборку для entity.attribute == @ «somevalue»

7

Как настроить запрос на выборку, чтобы извлечь только данные из атрибута объекта с одним конкретным значением? Это основной код, который я использовал ранее.

-(void)fetchResults
{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:self.entityDescription.name];
    NSString *cacheName = [self.entityDescription.name stringByAppendingString:@"Cache"];

    // predicate code
    if (self.predicate != nil) {
        [fetchRequest setPredicate:self.predicate];
    }
    // end of predicate code

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:cacheName];

    BOOL success;
    NSError *error;
    success = [self.fetchedResultsController performFetch:&error];
    if (!success)
    {
        NSLog(@"%@", [error localizedDescription]);
    }
}

Я просматривал эту страницу:http://bit.ly/KevYwR это правильное направление?

Нужно ли использоватьNSPredicate или я могу обойтись без?

Спасибо за любую помощь, укажите правильное направление и т. Д.

Ваш Ответ

1   ответ
19

НастройкаNSFetchRequest эквивалентно утверждению SELECT на языке SQL.

Вот простой пример:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

// error handling code

Массивresults содержит все управляемые объекты, содержащиеся в файле sqlite. Если вы хотите получить определенный объект (или несколько объектов), вам нужно использовать предикат с этим запросом. Например:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@", @"Some Value"];
[request setPredicate:predicate]; 

В этом случаеresults содержит объекты, где атрибут равенSome Value, Установка предиката равна помещению предложения WHERE в оператор SQL.

Note

Я полагаю, что название объектаEntityName и его свойство называетсяattribute который имеет тип строки.

Для получения дополнительной информации я предлагаю вам прочитать руководство по программированию Core Data иNSFecthRequest ссылка на класс.

Надеюсь, поможет.

Похожие вопросы