2010-07-14 27 views
13

Tengo una aplicación que se ejecutaba correctamente en OS3 +. Pero no funciona bajo OS4. Me sale el siguiente mensaje de error:'NSFetchedResultsController no admite el seguimiento de cambios ni las solicitudes de búsqueda con NSDictionaryResultType'

'NSFetchedResultsController no soporta tanto el seguimiento de cambios y petición de recuperación de la NSDictionaryResultType'

lo hace sonar una campana a alguien aquí?

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

Gracias de antemano.

+0

Si configuro [fetchRequest setResultType: NSManagedObjectResultType] en lugar de [fetchRequest setResultType: NSDictionaryResultType], mi aplicación se carga normalmente. ' PERO [fetchRequest setReturnsDistinctResults: YES] ya no funciona y termino con duplicados !!!! Se necesita ayuda, por favor. :-) –

Respuesta

14

El error se refiere al hecho de que está tratando de obtener resultados de NSDictionary, pero también espera que el controlador de resultados obtenido observe los cambios. Dado que los cambios solo se propagarán a través del NSManagedObjects, el controlador de resultados obtenido ya no puede realizar su trabajo.

El uso de NSManagedObjectResultType no funciona porque entonces setPropertiesToFetch: ya no es aplicable. En su lugar, tendría que realizar uniones propias después de conocer el conjunto de resultados, lo que hará que el uso de un controlador de resultados obtenidos sea bastante difícil.

La mejor respuesta es no establecer un nombre de caché o un delegado para el controlador de resultados obtenidos, en cuyo caso será not perform any change tracking.

Cuestiones relacionadas