para over notes app iphone objective-c cocoa

iphone - over - notes app ios



¿Cómo escribir datos en plist? (6)

Cuando compile la aplicación, creará un archivo ejecutable "appName.app" y todos los archivos se integrarán en el paquete. Por lo tanto, no puede acceder a la carpeta de recursos cuando la aplicación se está ejecutando porque todos los datos están en el paquete (no en la carpeta).

Sin embargo, puede acceder a una carpeta temporal que contiene cierta información de la aplicación. Puede encontrar la carpeta temporal aquí: Buscador abierto - haga clic en su nombre de usuario (en LUGARES) - Biblioteca - Soporte de aplicaciones - Simulador de iPhone - Usuario - Aplicaciones - (aquí puede encontrar todas las carpetas temporales de su aplicaciones de iPhone)

Puede acceder a esta carpeta temporal mediante:

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentsDirectory = [paths objectAtIndex:0];

Si nombra su archivo save.plist, puede acceder a él de esta manera:

NSString *filePath = [documentsDirectory stringByAppendingString:@"_save.plist"];

Luego simplemente guarde su archivo en esta ruta de archivo y aparecerá en la carpeta temporal llamada "Documents_save.plist".

* Tenga en cuenta que el nombre de la carpeta temporal varía cada vez que ejecuta la aplicación.

Recomiende un libro para usted: 《Desarrollo de iPhone para principiantes - Explorando el iPhone SDK. En el Capítulo 11 puedes encontrar lo que quieras.

He creado save.plist en una carpeta de recursos. He escrito algunos datos dentro de eso directamente (sin usar codificación). Soy capaz de leer esos datos pero no puedo escribir a través del código en el mismo save.plist. Al usar el siguiente código, intento escribir los datos, pero se almacenan en mi .app plist. El codigo esta aqui

NSString *errorDesc = nil; NSPropertyListFormat format; NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"save" ofType:@"plist"]; NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; NSMutableDictionary *temp = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; if (!temp) { NSLog(errorDesc); [errorDesc release]; } // [temp setValue:@"123" forKey:@"line1"]; // [temp writeToFile:plistPath atomically: YES]; //Reading data from save.plist NSLog([temp objectForKey:@"name"]); NSLog([temp objectForKey:@"wish"]); NSNumber *num=[temp valueForKey:@"roll"]; int i=[num intValue]; printf("%d",i); //writitng the data in save.plist [temp setValue:@"green" forKey:@"color"]; [temp writeToFile:plistPath atomically: NO]; NSMutableDictionary *temp1 = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; NSLog([temp objectForKey:@"color"]);

Quiero eso, los datos que quiero escribir deben escribirse en save.plist solo que se almacena en las referencias. Soy nuevo con este concepto. Así que si alguien lo sabe por favor ayúdame. Gracias por adelantado. :-)


No sé si entiendo su pregunta, pero si desea escribir en una lista dentro de su paquete .app probablemente esté haciendo algo mal. Si desea almacenar las preferencias, debe considerar el uso de NSUserDefaults .
Si realmente desea modificar un .plist empaquetado, aquí hay un código:

NSString *plistPath = nil; NSFileManager *manager = [NSFileManager defaultManager]; if (plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents/Info.plist"]) { if ([manager isWritableFileAtPath:plistPath]) { NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; [infoDict setObject:[NSNumber numberWithBool:hidden] forKey:@"LSUIElement"]; [infoDict writeToFile:plistPath atomically:NO]; [manager changeFileAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] atPath: [[NSBundle mainBundle] bundlePath]]; } }

Actualizar:
Nate Flink señaló que algunos de los métodos de NSFileManager utilizados anteriormente están en desuso. Publicó una respuesta con los siguientes métodos de reemplazo: https://.com/a/12428472/100848


Para resumir algunas de las otras respuestas:

El problema es que está intentando escribir el archivo nuevamente en la carpeta que contiene su aplicación. Esa carpeta no se puede escribir en tiempo de ejecución. Todo lo que está haciendo está bien, solo debe elegir una ubicación diferente para escribir su archivo.

Puede usar la función NSSearchPathForDirectoriesInDomains para encontrar una carpeta más adecuada para estos datos. (Como la carpeta @ "Documentos").


Versión actualizada del increíble ejemplo original de weichsel (¡gracias!). Xcode lanzó un par de advertencias, una de las cuales es un método obsoleto en NSFileManager. Actualizado aquí con métodos no obsoletos de iOS 5.1

NSString *plistPath = nil; NSFileManager *manager = [NSFileManager defaultManager]; if ((plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"mySpecial/PathTo.plist"])) { if ([manager isWritableFileAtPath:plistPath]) { NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; [infoDict setObject:@"foo object" forKey:@"fookey"]; [infoDict writeToFile:plistPath atomically:NO]; [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil]; } }


prueba esto:

-(void)add:(NSRunningApplication *) app { if ([self contains:app]) return; [self.apps addObject:app.localizedName]; [self.apps writeToFile:self.dataFile atomically:YES]; }

de "Programación del Cacao".


tiene que copiar su plist en el directorio de documentos ... porque no puede guardar nada sin guardar en el archivo de documentos ... cuando lo copie, podrá escribir / modificar en plist