Ho un NSFetchedResultsController impostato per popolare un UITableView, in base al largo il mio 'principale' NSManagedObjectContext.NSFetchedResultsController che non mostra gli aggiornamenti da altri contesti
In un timer, aggiungo continuamente oggetti in un NSManagedObjectContext separato, ma uno che condivide il suo NSPersistantStoreCoordinator con il contesto principale.
Sono in grado di visualizzare le notifiche di NSManagedObjectContextWillSaveNotification inviate e, quando si chiude l'app, ho tutti i dati dell'esecuzione precedente. Tuttavia, nessun aggiornamento si verifica nell'attuale NSFetchedResultsController.
Ho creato un progetto di test e lo ho inserito here.
(inizialmente ho pensato questo accadeva, non essendoci più thread in gioco, tuttavia, accade quando tutto è fatto in un thread).
domanda iniziale
Ho un NSFetchedResultsController impostato per popolare un UITableView, in base al largo il mio 'principale' NSManagedObjetContext.
In un thread in background, scaricare e importare diversi oggetti in un NSManagedObjectContext separato, ma uno che condivide il suo NSPersistantStoreCoordinator con il contesto del thread principale.
mi sono registrato per ricevere le notifiche NSManagedObjectContextWillSaveNotification. Quando li ottengo, li inoltro al thread principale e li passo al mio contesto principale.
utilizzando il debugger, posso guardare questi sono disponibili in, e verificare che essi sono, infatti, l'aggiunta di oggetti al contesto. Tuttavia, il mio NSFetchedResultsController non si sta aggiornando. Se faccio tutto questo nel thread principale, funziona. Chiamata -performFetch: sul controller causerà per aggiornare, quindi so che non è che non sta vedendo i nuovi oggetti.
La maggior parte di questo è codice standard, basta dividere in diversi thread.
Con "tutto questo nel thread principale", hai davvero creato due contesti sul thread principale e chiamato 'mergeChangesFromContextDidSaveNotification:' etc? – Yuji
No, quando disabilito il multithreading, è tutto fatto con un contesto (avevo la risposta sbagliata prima su questo). –
È stato determinato che si tratta di un bug con NSFRC? –