2010-07-14 7 views
13

Ho un'applicazione che funziona correttamente sotto OS3 +. Ma non funziona sotto OS4. Ottengo il seguente messaggio di errore:'NSFetchedResultsController non supporta il rilevamento delle modifiche e recupera le richieste con NSDictionaryResultType'

'NSFetchedResultsController non supporta sia il monitoraggio del cambiamento e recuperare richiesta con NSDictionaryResultType'

lo fa suonare un campanello a qualcuno qui?

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

Grazie in anticipo.

+0

Se imposto [fetchRequest setResultType: NSManagedObjectResultType] anziché [fetchRequest setResultType: NSDictionaryResultType], la mia app viene caricata normalmente. ' MA [fetchRequest setReturnsDistinctResults: YES] non funziona più e finisco con i duplicati !!!! Aiuto richiesto per favore. :-) –

risposta

14

L'errore si riferisce al fatto che si sta tentando di ottenere risultati NSDictionary, ma poi si aspetta anche il controller dei risultati recuperato per controllare le modifiche. Poiché le modifiche si propagheranno solo attraverso NSManagedObjects, il controller dei risultati recuperato non potrà più eseguire il proprio lavoro.

L'utilizzo di NSManagedObjectResultType non funziona perché l'setPropertiesToFetch: non è più applicabile. Invece, dovresti eseguire una coalescenza della tua dopo che è stato conosciuto il set di risultati, il che si rivelerà piuttosto difficile con un controller dei risultati recuperato.

La risposta migliore è di non impostare un nome cache o un delegato per il controller risultati recuperati, nel qual caso sarà not perform any change tracking.