Запрос на выборку возвращает массив объектов - NSFetchedResultsController возвращает ноль - PullRequest
2 голосов
/ 26 сентября 2011
    req = [[NSFetchRequest alloc] init];

    // entity
    ent = [NSEntityDescription entityForName:@"Medicine" inManagedObjectContext:context];
    [req setEntity:ent];

    // predicate
    pred = [NSPredicate predicateWithFormat:@"date > %@",referenceDate];
    [req setPredicate:pred];

    // sort descriptor
    sorter = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
    [req setSortDescriptors:[NSArray arrayWithObjects:sorter, nil]];

    NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:context sectionNameKeyPath:@"date" cacheName:@"asdsad"];
    NSLog(@"%@",[frc fetchedObjects]); // returns (null)

    //NSArray *frc = [context executeFetchRequest:req error:nil];
    //NSLog(@"%@",frc); // returns 4 objects

Как видно из моего кода, в конце у меня есть два разных бита.

Первый код (без комментариев) возвращает ноль в NSLog.

ВторойКод (закомментированный) возвращает массив из 4 объектов из контекста.

Есть ли причины, по которым это происходит?Я что-то не так делаю?

1 Ответ

6 голосов
/ 26 сентября 2011

Потому что вам нужно сделать еще одну вещь: executeFetch.

Вот подробности в документации:

performFetch: Выполняет запрос на получение получателя.

  • (BOOL) executeFetch: (NSError **) ошибка параметры ошибка Если выборка не удалась, по возвращении содержит объект ошибки, который описывает проблему. Возвращаемое значение ДА, если выборка выполнена успешно, в противном случае НЕТ.

Обсуждение После выполнения этого метода вы можете получить доступ к полученным объектам получателя с помощью свойства fetchedObjects .

...