2010-07-14 5 views
13

Ich habe eine Anwendung, die gerade gut unter OS3 + lief. Aber es funktioniert nicht unter OS4. Ich erhalte die folgende Fehlermeldung:'NSFetchedResultsController unterstützt nicht sowohl Änderungsverfolgung als auch Abrufanforderung mit NSDictionaryResultType'

‚NSFetchedResultsController nicht beide Änderungsverfolgung unterstützt und Wunsch des holen mit NSDictionaryResultType‘

Gibt es hier eine Glocke läuten jemand?

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

Vielen Dank im Voraus.

+0

Wenn ich [fetchRequest setResultType: NSManagedObjectResultType] anstelle von [fetchRequest setResultType: NSDictionaryResultType] einstelle, wird meine App normal geladen. ' ABER [fetchRequest setReturnsDistinctResults: YES] funktioniert nicht mehr und ich am Ende mit Duplikaten !!!! Hilfe erforderlich bitte. :-) –

Antwort

14

Der Fehler bezieht sich auf die Tatsache, dass Sie versuchen, NSDictionary Ergebnisse zu erhalten, aber auch erwarten, dass die abgerufenen Ergebnisse Controller für Änderungen beobachten. Da sich Änderungen nur über NSManagedObjects ausbreiten, kann der abgerufene Ergebniscontroller seine Arbeit nicht mehr ausführen.

Die Verwendung von funktioniert nicht, weil dann setPropertiesToFetch: nicht mehr anwendbar ist. Stattdessen müssten Sie nach der Bekanntgabe der Ergebnismenge eine eigene Koaleszenz durchführen, was bei einem abgerufenen Ergebniscontroller eher schwierig ist.

Die beste Antwort ist, keinen Cache-Namen oder einen Delegaten für den abgerufenen Ergebnis-Controller zu setzen, in diesem Fall wird es not perform any change tracking.