Daten aus einem CoreData Modell in verschiedenen Views (über TabBar) mit unterschiedlichen Predicates aus einem fetchedResultsController

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Daten aus einem CoreData Modell in verschiedenen Views (über TabBar) mit unterschiedlichen Predicates aus einem fetchedResultsController

    Hallo liebe Entwicklergemeinde,


    wiedermal bin ich an meine doch sehr schnell erreichenden Grenzen gestoßen und hoffe auf Tipps von euch....


    Ich habe in meiner App einen TabBarController und jede Tab verweist auf eine TableView!
    Ebenso greife ich auf Daten zurück, die via. CoreData gespeichert werden.


    Soweit funktioniert das ganze auch ganz gut. Nun habe ich aber vor in den verschiedenen Views, verschiedene Daten aus dem selben CoreData Model zu laden.
    Dies mache ich mit einem Predicate im fetchedResultsController wie folgt:


    TableView 1 (Anzeige von Daten die größer sind als actualDate):

    Quellcode

    1. NSDate *actualDate = [NSDate date]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"remindDate > %@", actualDate]; [fetchRequest setPredicate:predicate];




    TableView 2 (Anzeige von Daten die kleiner sind als actualDate):

    Quellcode

    1. NSDate *actualDate = [NSDate date]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"remindDate < %@", actualDate]; [fetchRequest setPredicate:predicate];


    In meiner AppDelegate habe ich folgende navigationController eingebunden:

    Quellcode

    1. RootViewController *rootViewController = (RootViewController *)[navigationController topViewController]; rootViewController.managedObjectContext = self.managedObjectContext; RootViewController *rootViewControllerReminderList = (RootViewController *)[navigationControllerReminderList topViewController]; rootViewControllerReminderList.managedObjectContext = self.managedObjectContext; RootViewController *rootViewControllerLearnedList = (RootViewController *)[navigationControllerLearnedList topViewController]; rootViewControllerLearnedList.managedObjectContext = self.managedObjectContext; ...... ...... ...... [self.window addSubview:tabBarController.view]; [self.window makeKeyAndVisible];






    Leider erhalte ich aber, meines Erachtens willkürlich, folgende Fehlermeldung wenn ich die App im Simulator teste (wenn ich jeweils die zweite TableView im TabBar anklicke, Reihenfolge ist egal):


    FATAL ERROR: The persistent cache of section information does not match the current configuration. You have illegally mutated the NSFetchedResultsController's fetch request, its predicate, or its sort descriptor without either disabling caching or using +deleteCacheWithName:
    2011-10-18 21:34:20.287 eLearning[18370:bc03] fetch request = (entity: LearningObjects; predicate: (remindDate > CAST(340659260.285595, "NSDate")); sortDescriptors: ((
    "(remindDate, ascending, compare:)"
    )); batch size: 20; type: NSManagedObjectResultType; )
    2011-10-18 21:34:20.289 eLearning[18370:bc03] cached objects were: (
    " (entity: LearningObjects; id: 0x4d80a00 ; data: {\n firstLearningObject = gonna;\n remindDate = \"2011-10-18 11:17:57 +0000\";\n secondLearningObject = \"going to\";\n})"
    )
    2011-10-18 21:34:20.290 eLearning[18370:bc03] fetched objects are: (
    " (entity: LearningObjects; id: 0x5942210 ; data: {\n firstLearningObject = overdue;\n remindDate = \"2011-10-25 19:25:22 +0000\";\n secondLearningObject = \"\\U00fcberf\\U00e4llig\";\n})"
    )
    2011-10-18 21:34:20.292 eLearning[18370:bc03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'FATAL ERROR: The persistent cache of section information does not match the current configuration. You have illegally mutated the NSFetchedResultsController's fetch request, its predicate, or its sort descriptor without either disabling caching or using +deleteCacheWithName:'
    *** Call stack at first throw:


    Hieraus interpretiere ich nun das ich ein Problem habe, da ich auf einen fetchedResultsController mit unterschiedlichen Predicates zugreife!?

    Nun die eigentliche Frage.... Was mache ich falsch?


    Liegt es daran das ich immer auf den selben fetchedResultsController zugreife und das Predicate verändere, oder muss ich im AppDelegate jeweils andere managedObjectContext anlegen? Oder....???




    Ich danke wie schon so häufig für eure Mühe im Voraus....
    lipdila


  • Habe meinen Fehler gefunden. Ich hatte den Cache von meinem NSFetchedResultController in allen Controllern identisch angegeben! Habe diese auf Nil gesetzt und siehe da, es funzt!

    Quellcode

    1. NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];