Es allí una manera de conseguir un NSDictionary parte posterior de la cadena creada a través de su description método?

Dado este código:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value 1", @"value 2", nil] forKeys:[NSArray arrayWithObjects:@"key 1", @"key 2", nil]];
NSString *dictionaryString = [dictionary description];
NSLog(dictionaryString);

Que hace esta salida:

{
    "key 1" = "value 1";
    "key 2" = "value 2";
}

Hay una forma fácil de volver de la cadena a un NSDictionary?

¿Por qué no utilizar la serialización en lugar de las descripciones de campo?
NSLog(dictionaryString); es un problema de seguridad. Uso NSLog(@»%@», dictionaryString); en su lugar. Si dictionaryString contenidos de los caracteres %@, que la aplicación se bloquee, o revelar información potencialmente sensible.

OriginalEl autor Lounges | 2009-06-15

4 Comentarios

  1. 5

    En el riesgo de pedir una pregunta estúpida: ¿por qué quieres hacer esto? Si desea ir y volver de texto, utilice el NSPropertyListSerialization clase.

    He escrito esto como un claro ejemplo de la cadena estoy tratando de analizar. A decir verdad el «Diccionario de la Cadena» viene de una API de 3.0 y no es mi código. Pensé que podría ser una forma sencilla de analizar.
    Quizás es en realidad una lista de propiedades en OpenStep formato (que es lo que -[NSDictionary descripción] es, excepto que se permite a los no-propiedad-de la lista de objetos). Trate de NSPropertyListSerialization con ese formato.
    Este gran trabajo. Gracias.
    +1 Gracias. trabajó como un encanto.. solo si alguien está buscando un ejemplo NSError* error; NSPropertyListFormat plistFormat; NSDictionary *temp = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:&plistFormat error:&error];
    NSPropertyListSerialization no admite texto, es compatible con NSData sólo. Así se produce un error en la pregunta «convertir nsstring a nsdictionary»

    OriginalEl autor Ben Gottlieb

  2. 5

    La respuesta corta es no. El texto de la descripción pretende ser una breve descripción de los contenidos del diccionario, generalmente con fines de depuración.

    Puede ser posible (pero no recomendable) para analizar la cadena de salida y usarlo para rellenar un nuevo diccionario, pero hay muchos casos en que esto no iba a funcionar. Si, por ejemplo, el original de su diccionario de contenidos personalizados de tipos de datos, la descripción de la salida iba a aparecer algo como:

    {
        "key 1" = <SomeClass 0x31415927>;
        "key 2" = <SomeClass 0x42424242>;
    }

    Que es, por supuesto, no es reversible.

    De desarrolladores de Apple, documentación para la description método en NSDictionary:

    Si cada tecla en el receptor es un objeto NSString, las entradas se enumeran en orden ascendente por la clave, de lo contrario el orden en el que se enumeran las entradas es de carácter indefinido. Este método está diseñado para producir una salida legible para propósitos de depuración, no para serializar los datos. Si desea almacenar el diccionario de datos para su posterior recuperación, consulte Lista De Propiedades De Guía De Programación y Archivos y Serializations Guía de Programación para el Cacao.

    OriginalEl autor e.James

  3. 2
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value 1", @"value 2", nil] forKeys:[NSArray arrayWithObjects:@"key 1", @"key 2", nil]];
        NSString *dictionaryString = [dictionary description];
        NSLog(@"%@", dictionaryString);
    
        NSDictionary *d = [dictionaryString propertyList];
        NSLog(@"%@", [d objectForKey:@"key 2"]);

    Nota que Apple docs decir

    /* Estos métodos ya no se recomienda, ya que no funcionan con listas de propiedades y cadenas de archivos en formato binario formato plist. Por favor, utilice la Api en NSPropertyList.h lugar.
    */

    Sin embargo, si usted sabe o puede validar que no se le está pasando un formato binario, esto debería funcionar sin problema.

    OriginalEl autor applehelpwriter

  4. 1

    Creo que no hay uno, puede escribir un método de sí mismo a través de, mediante la enumeración de los contenidos de una cadena, parece bastante fácil formato de ir a través de.

    No es una gran idea. Aunque el formato parece simple con este código, que no siempre se puede contar con las citas o incluso el formato exacto que se muestra.
    El aceptó respuesta explica bien y su factible.

    OriginalEl autor Suvesh Pratapa

Dejar respuesta

Please enter your comment!
Please enter your name here