2008-11-20 13 views
28

Estoy escribiendo una aplicación para iPhone y necesito guardar el estado de mi aplicación (aproximadamente 5K).La mejor manera de guardar datos en el iPhone

Mi principal preocupación es que los datos persisten en todas las actualizaciones. Algunas de las aplicaciones que uso claramente obtuvieron este error, ¡y preferiría no hacerlo!

Respuesta

30

Para guardar el estado, NSUserDefaults es el camino a seguir. Creo que la mayoría, si no todas, las instancias de datos de aplicaciones que se eliminan después de una actualización se deben a problemas en la AppStore. Pueden estar relacionados con cambios de formato de datos, pero si utiliza solo NSUserDefaults y objetos estándar almacenables por plist (NSString, NSDictionary, NSNumber, NSArray, NSNumber y primitivos), debe estar seguro.

+0

Me han dicho que los datos de la aplicación persistirán a través de las actualizaciones aquí - http://stackoverflow.com/questions/7520800/are-values-stored-in-nsuserdefaults-removed-when-the-app-that-put-them -ahi estas. ¿Cual es correcta? – barfoon

+0

Debe tenerse en cuenta que algunos usos de NSUserDefaults pueden hacer que la aplicación se rechace desde el envío al App Store. Se recomienda usarlo solo como se pretende, que es para las preferencias del usuario de la aplicación. – BigOmega

+0

@ioSamurai ¿Tiene alguna fuente al respecto? La mayoría de las aplicaciones que he visto lo usan para almacenamiento de datos corto – Sirens

0

La forma más común de guardar el estado (datos, información de la aplicación, etc.) es usar Sqlite3. No estoy seguro de cómo una actualización lo borrará, pero es posible que el proceso de actualización pueda sobrescribir el archivo de datos.

La otra opción sería usar UserPrefs (NSUserDefaults). Una vez más, no estoy seguro del tamaño máximo para eso, o incluso si sería adecuado para los datos que necesita persistir.

+0

Creo que te refieres NSUserDefaults –

+0

Sí, lo hago. Whoops.Editaré – JamesSugrue

4

Utilizo sqlite para almacenar todos los datos de la aplicación y las preferencias. Para asegurarse de que las actualizaciones no borren los datos, asegúrese de que el archivo sqlite esté almacenado en el directorio de documentos de la aplicación, que no se sobrescribe con las actualizaciones. Algunos de los códigos de ejemplo ("Libros de SQLite" creo) que Apple proporciona tienen código para manejar esto.

6

Realmente depende de lo que está haciendo y de sus necesidades.

Si se trata de una pequeña cantidad de datos, NSUserDefaults es una gran manera de hacerlo. También puede guardar un diccionario o una matriz en la carpeta Documentos de la aplicación, luego cargar ese archivo de nuevo en el inicio.

SQLite es bueno, pero a menos que tengas una gran cantidad de datos que estarás consultando, es un poco exagerado por solo guardar el estado.

2

para pequeñas cantidades de datos NSUserDefaults es una solución perfecta, si necesita una consulta ad hoc de datos, sqlite es el camino a seguir. Esas dos soluciones son perfectas para almacenar datos en el dispositivo; si necesita más flexibilidad y capacidad, podría considerar datos remotos, es decir, servicios web y una base de datos de servidor.

1

Here es un enlace a un debate que proporcionó un muy buen ejemplo de cómo acceder a sus datos y qué tipo de esquemas de almacenamiento serían más beneficiosos en determinadas circunstancias. La solución de @Ben Gottlieb está en el objetivo, solo pensé que esta pregunta agregaría un recurso adicional. ¡Espero que esto ayude!

12

Hay una forma sencilla de hacer exactamente esto Para guardar:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[prefs setObject:@"TextToSave" forKey:@"keyToFindText"]; 

Para la carga:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSString *textToLoad = [prefs stringForKey:@"keyToFindText"]; 

Lo importante es que no almacena valores muy grandes en NSUserDefaults. Existe la posibilidad de tener problemas con la revisión de Apple si lo hace.

Generalmente, los valores predeterminados del usuario se utilizan para almacenar claves breves y preferencias, como el nivel de volumen de los usuarios, si quieren usar el centro de juegos o enviar registros de fallos.

Cuestiones relacionadas