2013-06-09 7 views
5

Sto cercando di ottenere dati da alcuni e di salvarli in uno NSMutableArray di oggetti personalizzati che contengono tali dati e informazioni.Importazione, visualizzazione e memorizzazione nella cache di dati di grandi dimensioni

Ogni volta che l'utente apre l'applicazione, gli stessi dati vengono caricati dall'origine e convertiti nel mio array con oggetti personalizzati. Questo richiede molto tempo (~ 10-20 secondi) e rende l'app stupida. Quindi quello che ho cercato di ottenere i dati e visualizzarli come in this link

Quello che ho cercato:

  • risparmio l'array con oggetti personalizzati in un file e caricare il file sul prossimo avvio app (se trovato) senza una necessità di creare nuovamente l'oggetto personalizzato da zero.
  • codifica oggetto personalizzato & decodifica richiede molto tempo durante il test. Anche se lo salvi in ​​NSUserDefault.

Prima che qualcuno inizi a rispondere a questa domanda, prego. Dai un'occhiata al codice di esempio ed eseguilo per assicurarti cosa intendo recuperando i dati e visualizzandoli. in tempo veloce dopo il rilancio del campione e faccio quello che voglio più chiaro :)

Se qualcuno può fare questa sample più chiaro per me sarò grato.

+0

Stai utilizzando i dati principali? Da dove provengono i tuoi grandi dati? Ha davvero bisogno di essere importato ogni volta che l'utente lancia l'app? –

+0

diciamo che sto cercando di ottenere tutti gli eventi dal calendario nativo o ottenere tutti i contatti quando l'app viene eseguita, quindi riempire l'array con oggetti personalizzati che contengono contatti o dettagli degli eventi ??? – Omarj

+0

@AmyWorrall come ho detto prima, se voglio salvarlo nel database è necessario codificare e decodificare e questo richiede un tempo in cui la matrice contiene più di 3-5k di record? – Omarj

risposta

0

Thx tutti :)

ho trovato questo semplice tutorial che spiegano alcune parti del codice di esempio "fetchedResultsController".

e il diverso è nel file .pch in cui è disponibile la condizione ZAssert per recuperare i dati all'avvio dell'app e alla prima aggiunta.

2

A mio parere ci sono solo due opzioni ragionevoli: 1) l'ovvio è usare un archivio di database e Core Data per gestire i tuoi oggetti. 2) se non si desidera utilizzare Core Data, è possibile memorizzare separatamente ciascuno degli oggetti personalizzati in modo che sia possibile caricarli in batch.

Se si vuole andare per la seconda opzione è possibile:

1) Attuare il protocollo NSCoding sul vostro oggetto personalizzato. (è solo un po 'di codice boilerplate, molto semplice) 2) Dopo aver caricato i dati, è possibile salvarli in modo asincrono su disco (in questo modo non si bloccherà l'interfaccia utente). 3) Quando l'app si avvia, è possibile caricare una serie di oggetti (ad esempio 20, considerando che si visualizzerà solo ~ 10 in un punto specifico). Quindi, quando l'utente scorre i tuoi contenuti, puoi caricare in modo asincrono un numero maggiore di essi negli stessi blocchi in modo che siano pronti per essere visualizzati se/quando necessario.

Ciò dovrebbe migliorare notevolmente le prestazioni della tua app. Se si utilizzano i dati principali, è possibile utilizzare un comportamento simile impostando la proprietà - [NSFetchRequest fetchBatchSize]. Questo si occuperà di prelevare automaticamente i dati in lotti.

0

Ti sto raccomandando una soluzione molto semplice che ho usato molte volte ed è anche molto efficiente.

  1. Scaricare video su filesystem se scaricare riescono poi scrivere file di
  2. percorso SQLite successivo controllo di tempo se il file con lo stesso nome o lo stesso id
  3. esiste nel file di SQLite troppo Se sì allora riprodurre il video da SQLite
  4. altrimenti vai al primo passaggio.

Per questa soluzione è necessario creare una nuova classe manager che si assicuri da dove è necessario recuperare i dati.