Ho usato entrambi pesantemente su molti progetti ora.
FMDB è molto semplice, se si conosce SQL può anche essere piuttosto facile da usare. Ma che cosa si deve fare attraverso il ciclo di vita di un app, come il modello di dati cambia è:
- Modificare il modello di dati, in genere con qualcosa come Base
codice
- Change SQL per riflettere modello cambia
- Modifica dati oggetti per riflettere le modifiche del modello
- Aggiungere il codice nell'app per gestire il caso in cui si incontra il precedente database .
Cosa Core Data porta al ciclo di vita è questo:
- modello di dati e gli oggetti vengono modificati con la stessa azione (sono assumendo si genera gli oggetti di dati con qualcosa di simile mogenerator).
- Visualizzazione più semplice del modello di dati.
- Incoraggia più facilmente a superare i modelli di dati facendoti pensare alle relazioni inverse .
- Spesso la migrazione automatica è sufficiente per la transizione attraverso le semplici modifiche del modello senza dover ricostruire il DB da zero.
- I dati principali offrono integrazione con iCloud tramite NSManagedDocument.
L'inferno che Core Data si mette attraverso è:
- Soppressione fa schifo, perché ogni accesso di immobili a un oggetto eliminato lancia un programma di uccidere eccezione.
- Sfondo accesso ai dati filo fa schifo, perché Core Data rende complesso per funzionare correttamente con più thread - non si può per esempio utilizzare un oggetto di dati è stato ottenuto da un contesto in un thread in un altro thread diverso. Così tanto per il semplice passaggio degli oggetti ai thread di sfondo per il lavoro con ...
- C'è così tanta magia che gira intorno ai tuoi dati che QUANDO le cose vanno sbagliato sarà terribilmente frustrante cercare di capire cosa fare a fare.
- I dati di base sembrano terribilmente fragili, cose come gli oggetti eliminati che lanciano eccezioni, usando dal thread sbagliato lanciare eccezioni, convalide lanciare eccezioni, o l'intero modello svanire dopo quello che sembrava un semplice cambiamento sono tutte possibilità.
Quindi cosa consiglierei? Per parafrasare la vecchia citazione sulla democrazia, Core Data è il peggior sistema di persistenza dei dati - tranne che per tutti gli altri. Anche con la nuova definizione di dolore e sofferenza che i Core Data porteranno nella tua vita, è ancora meno il lavoro e più facile da lavorare rispetto a FMDB o altri livelli di persistenza dei dati.
FMDB è più semplice e se si sta accettando di apportare molto più tempo alle modifiche e la definizione del modello di dati potrebbe essere corretta. Ma generalmente raccomanderei alle persone di mordere il proiettile e utilizzare i dati di base a meno che non ci sia una ragione chiara per non farlo.
alcuni suggerimenti rapidi:
- Non eliminare mai nulla in Core Data, mentre l'interfaccia utente è alto e possibilmente oggetti di accesso.
- Se possibile considerare il database come disponibile e in grado di ricostruire il contenuto , in modo che se l'automazione non funziona, l'utente può ancora eseguire l'app .
- Mantieni tutta l'attività di dati di base sul thread principale e inserisci solo lo sfondo come ultima risorsa.
- Non utilizzare in nessun caso le convalide dei dati principali o deselezionare mai il campo di attivazione "facoltativo" delle proprie entità. Quale preferiresti avere, un brutto valore scivolare nel tuo modello che potrebbe finire per apparire divertente o semplicemente in crash?
- Utilizzare mogenerator per generare oggetti dati dal modello. Emette oggetti direttamente legati al modello che la rigenerazione può cambiare, e un livello di oggetti di tipo "sopra" che inizia in bianco ma in cui è possibile aggiungere la logica personalizzata attorno agli oggetti dati e non verrà modificato quando gli oggetti inferiori sono rigenerati.
fonte
2011-12-17 06:45:04
Per quanto riguarda il commento "supportato solo da 3.0 e versioni successive sdk", Apple non accetta più applicazioni per l'App Store che hanno come target una versione del sistema operativo precedente alla 3.0, quindi questo è un non problema. –