'NSFetchedResultsController не поддерживает запрос отслеживания изменений и выборки с помощью NSDictionaryResultType'

У меня есть приложение, которое отлично работает под OS3+. Но он не работает под OS4. Появляется следующее сообщение об ошибке:

'NSFetchedResultsController не поддерживает отслеживание изменений и запрос выборки с помощью NSDictionaryResultType '

Позволяет ли он позвонить кому-нибудь здесь?

- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController != nil) {
        return fetchedResultsController;
    }

    /*
     Set up the fetched results controller.
     */
    // Create the fetch request for the entity.
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"myEntity" inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:myEntity];

    [fetchRequest setResultType:NSDictionaryResultType];

    [fetchRequest setPropertiesToFetch :[NSArray arrayWithObjects:@"FIELD1",@"FIELD2",@"FIELD3",@"FIELD4",@"FIELD5",nil]];      

    // Setting unique values        
    [fetchRequest setReturnsDistinctResults:YES];       

    // Edit the sort key as appropriate.
    NSSortDescriptor *initialDescriptor = [[NSSortDescriptor alloc] initWithKey:@"FIELD1" ascending:YES];

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:initialDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];      

    // Edit the section name key path and cache name if appropriate.
    // nil for section name key path means "no sections".       
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"FIELD1" cacheName:@"myCache"];

    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;
    [aFetchedResultsController release];
    [fetchRequest release];
    [initialDescriptor release];
    [sortDescriptors release];      

    return fetchedResultsController;
}    

Спасибо заранее.

Ответы

Ответ 1

Ошибка связана с тем, что вы пытаетесь получить результаты NSDictionary, но затем также ожидаете, что контроллер получаемых результатов будет следить за изменениями. Поскольку изменения будут распространяться только через NSManagedObjects, контроллер получаемых результатов больше не сможет выполнять свое задание.

Использование NSManagedObjectResultType не работает, потому что тогда setPropertiesToFetch: больше не применимо. Вместо этого вам нужно будет выполнить некоторую совместную работу после того, как будет найден результат, который будет довольно затруднен с помощью получаемого контроллера результатов.

Лучший ответ - не задавать имя кеша или делегат для выбранного контроллера результатов, и в этом случае он не выполняет отслеживание изменений.