no se puede save plist. ruta no es escribible

Estoy guardando muchas informaciones en un plist. Este es un standart en mi mainBundle.

este es mi método para cargar la ruta y los datos del plist. si el file en la carpeta "soporte de la aplicación" no existe, lo estoy copyndo desde mainBundle allí.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; self.plistPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath: self.plistPath]) { NSString *pathInBundle = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; self.plist = [NSMutableDictionary dictionaryWithContentsOfFile:pathInBundle]; NSLog(@"plist doesnt exist"); } else { self.plist = [NSMutableDictionary dictionaryWithContentsOfFile:self.plistPath]; NSLog(@"plist exist"); } NSLog(@"plist path: %@",self.plistPath); 

Si agrego las siguientes líneas al final, solo hay la respuesta NO :

 if([fileManager isWritableFileAtPath:self.plistPath]) NSLog(@"YES"); else NSLog(@"NO"); 

después de todo, intenté save con [self.plist writeToFile:self.plistPath atomically:YES]; , que tampoco funciona.


perdón por contestar tan tarde, tuve muchas otras cosas que hacer. Volver a mi problema: solo recibo el error, cuando bash agregar una nueva input a mi dictionary (plist). La edición no es un problema. Creo que el problema es cómo bash agregar la input. mi código se ve así:

 NSMutableDictionary *updateDict = [[self.plist objectForKey:@"comments"]mutableCopy]; NSMutableDictionary *tmpDict = [[[NSMutableDictionary alloc]init]autorelease]; [tmpDict setObject:comment forKey:@"comment"]; [tmpDict setObject:author forKey:@"author"]; [tmpDict setObject:car forKey:@"car"]; [tmpDict setObject:part forKey:@"part"]; [tmpDict setObject:date forKey:@"date"]; [updateDict setObject:tmpDict forKey:[NSNumber numberWithInt:[updateDict count]+1]]; [self.plist setObject:updateDict forKey:@"comments"]; if([self.plist writeToFile:self.plistPath atomically:YES]) { return YES; } else { return NO; } 

self.plist es mi copy local del file en plistPath. la estructura de mi plist se ve así: https://img.skitch.com/20111026-tcjxp9ha4up8ggtfjy7ucgqcqe.png

espero que esto ayude

Ok, así que ese no es el directory de Documentos y iOS no tiene un directory de Soporte de aplicaciones creado en el sandbox de forma pnetworkingeterminada, por lo que no puede escribir.

Puede cambiar la llamada de su método para search en el directory de documentos reales:

 NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

O bien, después de get la ruta al directory de Soporte de aplicaciones , debe verificar si ya existe y si no, créelo.

revise la publicación anterior que muestra la forma diferente de copyr el plist de mainBundle. Use [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; método en su lugar

¿Encontraste una respuesta? si no, necesita cambiar esta línea:

 [updateDict setObject:tmpDict forKey:[NSNumber numberWithInt:[updateDict count]+1]]; 

a

 [updateDict setObject:tmpDict forKey:[NSString stringWithFormat:@"%d",[updateDict count]+1]]; 

El nombre de key es cadena, no object.