2009-12-10 1 views
43

Sto lavorando alla mia seconda app per iPhone e sono curioso di conoscere Core Data. Il tempo dedicato al progetto è limitato, come del resto è il mio tempo.Perché dovrei usare Core Data per la mia app per iPhone?

Sono l'unico dev e ho la sensazione che i dati di base siano utili, ma non posso spiegare chiaramente perché.

Si prega di scusare la seguente offuscamento .. l'applicazione ha bisogno di recuperare un elenco di foos da un server centrale. Gli utenti possono quindi aggiungere una barra, da un elenco di barre, alle foos, quindi aggiungere un baz da un elenco di bazes (!?) alla barra, quindi aggiungere alcune foto e descrizioni opzionali al baz.

Una volta che l'utente è soddisfatto della propria barra e del lavoro di baz, fa clic su un pulsante di sincronizzazione per caricare i dati sul server centrale.

Come si può vedere, si tratta di una semplice app di drill down basata sui dati, ma non sono ancora sicuro di poter giustificare l'utilizzo dei dati di base con i nostri limiti di tempo: la curva di apprendimento sembra ripida.

Se sostengo che il mio capo dovrebbe usare Core Data, quali punti di proiettile posso sparargli? Anche le granate logiche sono apprezzate.

+1

Nulla da aggiungere al di là di ciò che è già stato detto, ma ha voluto citare: Ho fatto questa stessa domanda una volta. Oggi non riesco a immaginare di costruire un'app senza Core Data. La modellazione della relazione da sola non ha prezzo. Ne vale davvero la pena. –

risposta

53

Core Data sarà soprattutto aiutare nelle sfaccettature ausiliari della domanda - le cose come persistenza dei dati, presentazione, ecc Alcuni punti elenco per il tuo capo:

  • Core Data gestisce salvare e annulla la funzionalità per te. Ha un archivio permanente, che tiene traccia delle modifiche e può essere scaricato automaticamente sul disco in qualsiasi momento (chiusura dell'app, ecc.).
  • I dati principali e le classi correlate consentono di trasferire facilmente le entità in UITableViews, ad esempio NSFetchedResultsController.
  • Core Data astrae un sacco di cose disordinate che altrimenti avresti a che fare con te stesso, come liste di oggetti, relazioni uno-a-molti o molti-a-molti, o vincoli sugli attributi dell'oggetto, in un un'unica bella interfaccia orientata agli oggetti.
  • Core Data viene fornito con un editor di modello di oggetto grafico che può aiutarti a pensare attraverso il design dell'oggetto/entità e perfezionarlo man mano che procedi. (Supporta anche la migrazione, quindi se decidi in seguito che desideri attributi diversi sulle tue entità, puoi farlo in modo relativamente semplice.)

Certo, la curva di apprendimento può essere un po 'ripida, ma gli esempi di Apple sono ottimo per cominciare, e la documentazione di Core Data è molto completa e utile. Una volta scaricati i dati di base, sarà semplicissimo creare la tua app.

+7

Aggiungete alla lista il fatto che i dati di base in molti casi possono avere prestazioni migliori rispetto a SQLite non elaborato, sia per quanto riguarda la CPU che la memoria. L'utilizzo del recupero in batch con NSFetchedResultsController è una riga di codice, tuttavia può comportare significativi miglioramenti delle prestazioni. Ho visto Core Data battere anche il codice SQLite calibrato a mano su applicazioni desktop, e sono sicuro che la prestazione è stata una priorità quando la portava su iPhone. –

+0

La curva di apprendimento è decisamente ripida e mi impedisce di svolgere semplici attività come, recuperare un elenco di prodotti nel completamento automatico in base ai numeri di codice prodotto digitati finora. Qualcosa di semplice come quello che richiede l'uso delle tecnologie Core Data o che utilizzerà SQLite va bene? Spero solo di non perdere nessuna prestazione scegliendo il secondo. Ho familiarità con la codifica in stile SQL e avrei recuperato tutti i prodotti all'avvio, quindi ho filtrato i prodotti con predicati che mostravano il set che inizia con il numero di prodotto digitato finora. E 'la strada da percorrere? – Pavan

+0

Quanto sopra è un requisito di funzionalità per una delle applicazioni che sto creando e sto impedendo la necessità di contattare un server Web dal momento che il completamento automatico risponde lentamente, quindi l'archiviazione locale è l'opzione valida. Ma quale è meglio per i miei scopi?Poi presenterò lo scenario 2) per l'app numero 2, tutto ciò che farò è memorizzare i dati biometrici di impronte digitali localmente in un campo "blob' x 3000 utenti registrati, e quando un utente passa il dito sulla mia macchina per impronte digitali, l'impronta restituita avrà bisogno da abbinare a tutti i modelli di impronte digitali salvati nel DB. I dati di base sono migliori qui o SQLite? – Pavan

1

Hai un paio di opzioni diverse per un negozio locale persistente, ma dovresti comunque usarne uno di questi, quindi perché non utilizzare i dati di base?

Per quanto riguarda la curva di apprendimento, ci sono applicazioni negli esempi che ti aiuteranno qui. È piuttosto semplice una volta che passi attraverso i campioni.

-t

7

Per sfruttare CoreData, è necessario conoscere una buona dose di tecnologie, concetti e modelli Cocoa. La curva di apprendimento non è molto ripida se conosci queste cose. Se sembra ripido, eviterei di renderlo critico per il tuo progetto, e quindi solo di imparare durante i periodi di inattività, per poi usarlo una volta che ti senti a tuo agio con esso. Non è sicuramente una tecnologia per principianti; avrete bisogno di una buona base di programmazione, comprese le tecnologie e i concetti specifici di Cocoa.Un sacco di persone lo vedono e pensano che sarà facile per loro, perché, , potrebbero ottenere molto gratuitamente. È come un generatore di codice, praticamente inutile per qualcuno che lo usa per fare proprio questo (churn out code), piuttosto che usarlo abilmente in risposta al problema impostato.

2

Sono ancora nella gamma di conoscenze X-Code 101, ma la prima app che ho utilizzato sui miei dati di base utilizzati (dopo aver letto un buon tutorial).

C'è un gran numero di software standard che viene già scritto nel modello di app vuoto, ma l'effettiva interazione del programmatore con la funzionalità del database è minima e diretta.

Provalo: è più facile di quanto pensi.

5

Per quanto riguarda la curva di apprendimento, non penso che sia così male come pensi. Utilizzando le classi di esempio di Apple e il modello di progetto CoreData predefinito, sono riuscito ad avere un'app funzionante CoreData (abbastanza semplice, ma non banale) in un solo pomeriggio, e ci sono voluti solo un paio di giorni di gioco con il codice prima di avere un ottima comprensione di tutte le parti in movimento (tutto durante lo sviluppo del resto dell'app, quindi non è stato sprecato tempo per armeggiare).

CoreData funziona molto ... logicamente, credo, ed è incredibilmente conveniente. Ti fa risparmiare un sacco di spese generali, e so che sicuramente mi ha risparmiato un sacco di tempo a scrivere quell'app. Il breve investimento iniziale nell'apprendimento della nuova tecnologia è valsa la pena a lungo termine, ora che ho uno strumento così potente nella mia fondina.

1

Un oggetto gestito Core Data può avere tutti i relativi dati salvati nel database e viene fatto riferimento solo come un ID in memoria. In questo modo, i dati di base possono risparmiare molta memoria, soprattutto se si dispone di molti dati del modello. Una volta che usi Core Data, non devi più preoccuparti dei problemi di memoria dei dati del modello.

+0

Non sono sicuro di quello che stai cercando di dire con questa risposta, ma forse dovresti parlare dei meccanismi di fagliatura di Core Data. Questo è più potente del semplice asserire che un recupero restituisce solo ID oggetto. È assolutamente necessario preoccuparsi dei problemi di memoria poiché è possibile creare cicli di riferimento intensi in Dati principali se si accede alla relazione inversa su un oggetto ManagedObject. Ecco perché refreshObject: mergeChanges: esiste il metodo –

0

Le altre risposte fanno un buon lavoro di spiegazione del perché è possibile utilizzare i dati principali, ma poiché la sua curva di apprendimento sembra essere una preoccupazione comune, potrebbe essere utile per coloro che incappano in questa domanda per sapere che esiste un alternativa con una curva di apprendimento considerevolmente "meno ripida": Realm.

Ecco un breve post quorum sul motivo per cui si potrebbe considerare Realm su Core Data: https://www.quora.com/Why-would-you-use-Realm-over-Core-Data