2010-07-14 3 views
13

J'ai une application qui s'exécutait correctement sous OS3 +. Mais cela ne fonctionne pas sous OS4. Je reçois le message d'erreur suivant:'NSFetchedResultsController ne prend pas en charge le suivi des modifications et les requêtes d'extraction avec NSDictionaryResultType'

« NSFetchedResultsController ne supporte pas les deux suivi des modifications et de FETCH avec NSDictionaryResultType »

-t-il sonner une cloche à tout le monde ici?

- (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; 
}  

Merci d'avance.

+0

Si je définis [fetchRequest setResultType: NSManagedObjectResultType] plutôt que [fetchRequest setResultType: NSDictionaryResultType], mon application se charge normalement. ' MAIS [fetchRequest setReturnsDistinctResults: YES] ne fonctionne plus et je me retrouve avec des doublons !!!! Aide requise s'il vous plaît. :-) –

Répondre

14

L'erreur fait référence au fait que vous essayez d'obtenir des résultats NSDictionary, mais que vous attendez ensuite également que le contrôleur de résultats récupéré surveille les modifications. Puisque les modifications ne se propagent que par NSManagedObjects, le contrôleur de résultats récupérés ne peut plus effectuer son travail. L'utilisation de NSManagedObjectResultType ne fonctionne pas, car setPropertiesToFetch: ne s'applique plus. Au lieu de cela, vous devrez effectuer une fusion de votre propre après que l'ensemble de résultats est connu, ce qui rendra l'utilisation avec un contrôleur de résultats récupérés plutôt difficile.

La meilleure réponse est de ne pas définir un nom de cache ou un délégué pour le contrôleur de résultats récupérés, auquel cas il sera not perform any change tracking.

Questions connexes