2009-07-19 11 views
6

Al escribir una aplicación para MacOSX, utilizando Cocoa/Objective-C, me gustaría poder almacenar los datos ingresados ​​por los usuarios. Solo habrá un usuario por instalación en este momento; sin embargo, me gustaría tener una idea de cómo cambian los métodos de almacenamiento si se tratara de varios usuarios por instalación.Almacenamiento persistente Cocoa/MacOSX

En el caso de 1 usuario por instalación, ¿debo adherirme a SQLLite para el almacenamiento persistente o cuál es la recomendación?

Si permitiera que varios usuarios por instalación, ¿qué método de almacenamiento persistente sería preferible?

Respuesta

7

Puede utilizar datos básicos y crear un almacén persistente por usuario (en ~/Library/Application Data/Mi Aplicación /)

+0

Casi siempre desarrollaría una nueva aplicación con Core Data, a menos que se me ocurriera una buena razón para no hacerlo. Los datos almacenados en la nube me vienen a la mente, pero incluso entonces creo que probablemente usaría Core Data como un caché local. Además, Core Data es rápido. –

+0

Si compartía datos entre diferentes usuarios, eso podría complicar las cosas. Pero siempre hay datos básicos basados ​​en documentos ... –

+0

Ok. ¿Y cómo puedo hacer esto? – mthama

1

¿Qué tipo de datos desea guardar? Por supuesto, todavía puedes usar sqlite para almacenar datos para múltiples usuarios (por ejemplo, Firefox hace esto).

Pero, dependiendo de sus datos, ¿puede guardarlo en archivos/documentos normales? Eche un vistazo al protocolo NSCoding y la clase abstracta NSCoder. O consulte la arquitectura del documento (NSDocumentController, NSDocument y NSWindowController).

1

Sólo habrá un usuario por la instalación en el momento; sin embargo, me gustaría tener una idea de cómo cambian los métodos de almacenamiento si se tratara de varios usuarios por instalación.

El formato es irrelevante siempre que solo guarde datos en el directorio de inicio del usuario de manera predeterminada.

Sus opciones incluyen listas de propiedades, Datos básicos (más una decisión arquitectónica: basar su aplicación en Datos centrales o no usarla), SQLite, NSKeyedArchiver y su propio formato personalizado.

2

También podría considerar usar un NSDictionary como su mecanismo de almacenamiento interno y luego escribirlo en los archivos de lista de propiedades usando [NSDictionary writeToFile: atómicamente:]. A un amigo mío le gusta referirse a los diccionarios como la estructura de datos de Dios (cara a cara).

Si el tamaño de sus datos es modesto, existen varias ventajas: legible por humanos, editable por humanos, modificable.

+1

El uso de NSDictionaries como objetos de modelo generará problemas cuando implemente la compatibilidad con AppleScript. Es mejor que cada objeto sea capaz de generar un diccionario que se represente a sí mismo y de volverse a incorporar desde un diccionario así generado. –

0

comenzaría a almacenar datos en la nube en lugar de almacenarlos localmente. Ahora que está saliendo el ipad, ¿qué pasa si tu aplicación también se usa en el iPhone y el iPad? Si almacena los datos en la nube, tanto la aplicación iphone como el ipad pueden usar los mismos datos. Si almacena localmente, obviamente, la aplicación iphone y la aplicación ipad no pueden usar los mismos datos.

+0

Las aplicaciones de Mac OS X no se pueden ejecutar en el iPhone/iPod Touch/iPad de todos modos. ¡Aplicación Cocoa! = Aplicación iPhone. ;) – mipadi

+0

mipadi: Joo Park podría estar sugiriendo esto en consideración de la posibilidad de que el interrogador algún día pueda iniciar una versión de iPhone y/o iPad de la aplicación.Sin embargo, no recomendaría almacenar datos completamente en la nube; las nubes tienen una forma de evaporarse. Usar la versión de Mac como un hub de sincronización (al menos como una alternativa opcional a The Cloud) sería mejor. –

Cuestiones relacionadas