Pregunta

Estoy intentando crear un plist editable por el usuario en el que el usuario pueda almacenar una rutina de entrenamiento personalizada que incluya cadenas a las que se hace referencia desde otro data.plist en el paquete de la aplicación.

Supongo que NSCoding es la mejor manera de hacerlo. Hasta ahora tengo la interfaz configurada como barra de navegación y vista de tabla.

Quiero que esté en blanco por defecto y el usuario tiene que presionar el "+" que está en la parte superior derecha de la barra de navegación. Luego, podría ingresar un nombre para una entrada en una matriz, por ejemplo, día del pecho o día del bíceps. Y dentro de esa matriz, habrá un diccionario u otra matriz de cadenas de los ejercicios particulares para ese día, por ejemplo, press de banca o curl de bíceps.

Este plist debe ser editable, por lo que irá a la carpeta de documentos de los usuarios y no al paquete de la aplicación.

Ejemplo:

La matriz superior consta de día de pecho, día de espalda y día de pierna. Dentro del diccionario Chest Day, incluya press de banca, tirón de pecho, flexiones, etc.

Actualización:

Añadiendo este método para buscar archivos de rutina;

    -(void)loadData
{
    if(YES)
    {
        NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString* routineFile = [documentsPath stringByAppendingPathComponent:@"routine.plist"];
        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:routineFile];
    }
    else
    {
        //load file
    }
}
¿Fue útil?

Solución

NSCoding es el protocolo utilizado por NSArchiver, NSKeyedArchiver, etc., no para serializar una matriz en una lista de propiedades.

Olvídate de la idea de que el usuario va a editar una lista de propiedades. El usuario va a editar los datos en su aplicación; el hecho de que esté almacenado como una lista de propiedades es solo un detalle de implementación. Cuando se inicia su aplicación, lee los datos almacenados en el archivo de datos. El usuario lo edita, lo mira, lo que sea. En algún momento después, quizás después de cada edición, quizás justo antes de que se cierre la aplicación, vuelve a escribir los datos en el archivo. Dado que es una lista de propiedades, no se preocupe por actualizar el archivo; ya tiene todos los datos, así que escriba una lista de propiedades completamente nueva y luego use ese archivo para reemplazar el anterior.

Quizás me equivoque y realmente desea que el usuario edite la lista de propiedades a mano, con un editor de texto. Esto sería un error. Es genial que las listas de propiedades sean legibles por humanos, pero pedirles a sus usuarios que editen sus archivos de datos sin procesar a mano es una fuerte indicación de que su aplicación no funciona. El propósito de su aplicación es realizar un seguimiento de esta información para el usuario; si quisieran usar un editor de texto para administrarlo, no necesitarían su aplicación. Entonces, dicho esto, espero no estar equivocado. ;-)

Otros consejos

No creo que use NSCoding para esto; si todo lo que está trabajando son objetos plist estándar como NSArray, NSDictionary y NSString, el método -writeToFile: atomically: de la matriz superior es una manera fácil de hacerloel trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top