2010-01-28 15 views
5

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.

+0

Con "tutto questo nel thread principale", hai davvero creato due contesti sul thread principale e chiamato 'mergeChangesFromContextDidSaveNotification:' etc? – Yuji

+0

No, quando disabilito il multithreading, è tutto fatto con un contesto (avevo la risposta sbagliata prima su questo). –

+0

È stato determinato che si tratta di un bug con NSFRC? –

risposta

11

È possibile ricevere chiamate delegate da NSFetchedResultsController? In caso contrario, potrebbe trattarsi di un bug con NSFetchedResultsController stesso. Consiglierei di creare un progetto di test in grado di confermare/negare questo problema separatamente.

Se è possibile duplicare in isolamento;

  1. Mi piacerebbe vederlo :)
  2. File un radar con Apple.

Dopo aver esaminato il codice, la risposta è di cambiare il vostro osservatore di notifica da NSManagedObjectContextWillSaveNotification a NSManagedObjectContextDidSaveNotification. Stavi inviando il messaggio solo prima del il salvataggio che stava causando i tuoi problemi.

Problemi correlati