2009-07-19 24 views
6

Durante la scrittura di un'applicazione per MacOSX, utilizzando Cocoa/Objective-C, mi piacerebbe poter memorizzare i dati inseriti dagli utenti. Al momento ci sarà un solo utente per installazione; tuttavia, mi piacerebbe avere un'idea di come cambiano i metodi di archiviazione se fossero più utenti per installazione.Storage persistente Cocoa/MacOSX

Nel caso di 1 utente per installazione, dovrei attenermi a SQLLite per l'archiviazione persistente o qual è la raccomandazione?

Se dovessi consentire più utenti per installazione, quale metodo di archiviazione permanente sarebbe preferibile?

risposta

7

È possibile utilizzare Core Data e creare un archivio permanente per utente (in ~/Library/Application Data/My App /)

+0

Quasi sempre svilupperei una nuova applicazione con Core Data, a meno che non riesca a trovare una buona ragione per non farlo. I dati memorizzati nel cloud mi vengono in mente, ma anche in questo caso penso che probabilmente utilizzerei i Core Data come cache locale. Inoltre, i dati di base sono veloci. –

+0

Se si condividono i dati tra utenti diversi, ciò potrebbe complicare le cose. Ma ci sono sempre dati base basati su documenti ... –

+0

Ok. E come posso farlo? – mthama

1

Che tipo di dati vuoi salvare? Naturalmente puoi ancora utilizzare sqlite per archiviare i dati per più utenti (ad esempio, Firefox lo fa).

Ma a seconda dei dati, è possibile che si desideri salvarli in file/documenti normali? Dai uno sguardo al protocollo NSCoding e alla classe astratta NSCoder. Oppure controlla l'architettura del documento (NSDocumentController, NSDocument e NSWindowController).

1

Ci sarà un solo utente per l'installazione al momento; tuttavia, mi piacerebbe avere un'idea di come cambiano i metodi di archiviazione se fossero più utenti per installazione.

Il formato è irrilevante se si salvano solo i dati nella directory Home dell'utente per impostazione predefinita.

Le opzioni includono gli elenchi di proprietà, i dati principali (più una decisione architettonica: si basa l'app sui dati principali o non la si utilizza), SQLite, NSKeyedArchiver e il proprio formato personalizzato.

2

Si potrebbe anche considerare l'utilizzo di un NSDictionary come meccanismo di archiviazione interno e quindi scriverli in file di elenchi di proprietà utilizzando [NSdictionary writeToFile: atomically:]. A un mio amico piace fare riferimento ai dizionari come struttura dati di Dio (lingua in guancia).

Se la dimensione dei dati è modesta, ci sono diversi vantaggi: leggibile da parte umana, scrivibile dall'uomo, modificabile.

+1

L'uso di NSDictionaries come oggetti modello causerà dolore quando si implementa il supporto AppleScript. È meglio avere ogni oggetto in grado di generare un dizionario che rappresenta se stesso e di aprirsi di nuovo da un dizionario così generato. –

0

Vorrei iniziare a memorizzare i dati sul cloud piuttosto che archiviare localmente. Ora che l'iPad sta uscendo, cosa succede se la tua app viene utilizzata anche su iphone e ipad. Se memorizzi i dati sul cloud, sia l'app per iphone che l'ipad possono utilizzare gli stessi dati. Se memorizzi localmente, ovviamente, l'app iphone e l'app ipad non possono utilizzare gli stessi dati.

+0

Le app Mac OS X non possono essere eseguite su iPhone/iPod Touch/iPad. Cocoa app! = App per iPhone. ;) – mipadi

+0

mipadi: Joo Park potrebbe suggerire questo in considerazione della possibilità che l'utente possa un giorno avviare una versione iPhone e/o iPad dell'app.Tuttavia, non suggerirei di memorizzare interamente i dati nel cloud; le nuvole hanno un modo di evaporare. Usare la versione Mac come hub di sincronizzazione (almeno come alternativa opzionale a The Cloud) sarebbe meglio. –