Domanda

Ho una visione di navigazione con un Table View, quando una riga viene cliccato, l'indexPath riga viene passata alla visualizzazione successiva.

Nella vista dei dettagli viewDidLoad, sto il recupero dei dati da Core Data. io uso il recupero dal delegato applicazione

[appDelegate loadItem:i];

Come si può vedere sto passando un intero solo che porta il numero di riga.

la domanda è: Come posso fare questo processo di chiamata in un altro thread. (Sullo sfondo) Ho bisogno di questo perché a volte il risultato del recupero è troppo grande, in modo che il trattamento richiede 3 secondi ritardare spingendo il dettagli Visualizza.

Ho bisogno di visualizzare un indicatore di attività per i tre secondi, quindi ho bisogno di mettere il Fetch in un altro thread per poter utilizzare l'interfaccia utente per l'indicatore, mentre l'operazione di recupero è in elaborazione.

Voglio il modo più semplice come io sono un novizio. Distacco alcuni codici sarà grande. o link:)

È stato utile?

Soluzione

miscelazione multithreading e Core Data non è un compito semplice. Il "Multi-Threading con core Data" sezione della programmazione core Data Guida descrive come interagire con core Data su più thread, tra tutte le cose che avete bisogno di stare attenti.

In sostanza, è necessario creare un contesto distinto oggetto gestito per ciascun thread. Questi contesti possono condividere l'accesso a un modello oggetto gestito e archivio permanente. Per il vostro caso, essi suggeriscono il seguente:

  

Si utilizzano due contesti oggetto gestito   associato ad un unico persistente   coordinatore del negozio. Si recupera in una   contesto oggetto gestito su uno sfondo   filo, e superare gli ID oggetto della   oggetti recuperati a un altro filo. Nel   la seconda filettatura (tipicamente   thread principale dell'applicazione, in modo che si   possono poi visualizzare i risultati), si utilizza   il secondo contesto di difetto in oggetti   con quegli ID oggetto (si utilizza   objectWithID: creare un'istanza della   oggetto).

Sembra che il campione BackgroundFetching applicazione mostra come fare questo, ma io non ce l'ho sul mio sistema.

Tuttavia, prima di arrivare troppo lontano nel multithreading tua richiesta di recupero, mi piacerebbe prendere uno sguardo duro sul perché sta prendendo così tanto tempo per caricare. Prima di tutto avrei consiglia di utilizzare -setFetchBatchSize: sul NSFetchRequest per limitare il numero di oggetti caricati in memoria tramite il fetch (che vi farà risparmiare un sacco di memoria, anche). Avanti, userei -setPropertiesToFetch:. Per limitare le proprietà azzardato solo quelli che userete immediatamente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top