2009-06-15 11 views
7

Sto lavorando a un'applicazione che contiene i dati in un server MySQL esterno, ma la memorizza nella cache localmente utilizzando i dati principali per tempi di risposta migliori. In sostanza, quello che vorrei fare è questo:Aggiornamento dei risultati di NSFetchedResultsController senza un nuovo recupero

  1. recuperare i dati da Core Data (archivio di dati SQLite, utilizzando NSFetchedResultsController) e visualizzarlo
  2. Grab nuovi elementi dal server MySQL in background
  3. Aggiorna la visualizzazione tabella corrente con il nuovo set di dati (sia nuovi che vecchi)

Ho tutto questo tranne l'ultimo passaggio. Non riesco a capire come fare un NSFetchedResultsController per aggiornare il suo insieme di dati. Finora, ho provato ad aggiungere voci direttamente al suo NSManagedObjectContext:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" 
           inManagedObjectContext:[fetchedResultsController 
                 managedObjectContext]];

Ho anche provato quello che Apple fa nella loro esempio CoreDataBooks, e ha utilizzato un "aggiungendo" contesto oggetto separato gestito e una chiamata a mergeChangesFromContextDidSaveNotification:. Né sembra cambiare il set di NSManagedObject * attualmente nel contesto dell'oggetto gestito del mio controller risultato recuperato.

Come posso aggiornare l'insieme di oggetti che un NSFetchedResultsController attualmente gestisce?

risposta

4

Ho scoperto che il mio problema non era che gli oggetti non si aggiornavano, ma che l'istanza NSFetchedResultsController che avevo non stava aggiornando i suoi titoli di indice delle sezioni correttamente, e quindi non potevo vedere i risultati nel mio UITableView.

Aggiornamento di un contesto oggetto gestito da un controller dei risultati recuperato fa aggiorna il set di oggetti risultato del controller.

7

solo avere il tuo problema e sì apparentemente usando le notifiche è l'unico modo in cui puoi fare un aggiornamento della vista tabella quando la tabella usa un controller nsfetchedresults.

come nel campione databooks fondamentali:
step1: aggiungere un osservatore al NSNotificationCenter per la NSManagedObjectContextDidSaveNotification notifica
Step2: salvare il contesto (il trigger di notifica al selettore)
Fase 3: nel metodo di selezione: unire le modifiche nel contesto utilizzando il metodo mergeChangesFromContextDidSaveNotification
step4: rimuovere l'osservatore dal centro notifiche.

Personalmente vorrei bypassare il certer di notifica e dire solo il contesto rinfrescarsi dannazione :)

+0

Questo è davvero il metodo che ho usato, e credo che questo è il modo in cui Apple fa in alcuni di loro Esempi di dati di base. – Tim

Problemi correlati