objective c - Parse Plist(NSString) en NSDictionary
objective-c xml (3)
Así que tengo una cadena estructurada plist, que se obtiene dinámicamente (no desde el sistema de archivos). ¿Cómo convertiría esta cadena a un NSDictionary?
Intenté convertir NSData y luego en NSDictionary con NSPropertyListSerialization, pero devuelve "[NSCFString objectAtIndex:]: selector no reconocido enviado a la instancia 0x100539f40" cuando intento acceder al NSDictionary, lo que demuestra que mi diccionario no se ha creado correctamente.
Ejemplo de NSString (que es la información plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Key1</key>
<dict>
<key>Test1</key>
<false/>
<key>Key2</key>
<string>Value2</string>
<key>Key3</key>
<string>value3</string>
</dict>
</dict>
</plist>
¡Gracias!
Intenté convertir NSData y luego en NSDictionary con NSPropertyListSerialization, pero devuelve "[NSCFString objectAtIndex:]: selector no reconocido enviado a la instancia 0x100539f40" cuando intento acceder al NSDictionary, lo que demuestra que mi diccionario no se ha creado correctamente.
No, no muestra tal cosa. Lo que muestra es que trataste de tratar una cadena como una matriz. Tendría que determinar en qué lugar de la lista estaba tratando de obtener una matriz y por qué había una cadena donde esperaba una matriz, es decir, si creó incorrectamente la plist ( colocando una cadena en la que quería poner una matriz ) o lo están examinando incorrectamente (la presencia de una cadena es correcta, su expectativa posterior de una matriz es incorrecta).
Prueba esto:
NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&errorDesc];
Ver serializar una lista de propiedades
NSData* plistData = [source dataUsingEncoding:NSUTF8StringEncoding];
NSString *error;
NSPropertyListFormat format;
NSDictionary* plist = [NSPropertyListSerialization propertyListWithData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
NSLog( @"plist is %@", plist );
if(!plist){
NSLog(@"Error: %@",error);
[error release];
}