2012-01-02 10 views
5

Tengo una estructura JSON comoRestKit: cómo definir opcional (anidada) keypaths

{ 
    "objects":{ 
     "person":[ 
     { 
      "id":"1", 
      "name":"my name" 
      "contacts":{ 
       "address":{ 
        "id":"1", 
        "street":"mystreet", 
        "country":"mycountry" 
       }, 
       "email":{ 
        "id":"1", 
        "emailAddress":"[email protected]" 
       } 
      }, 
     }, 
... 

y estoy tratando de hacer un mapa de la siguiente manera:

[personMapping mapKeyPath:@"contacts.address" toRelationship:@"address" withMapping:addressMapping]; 

Esto funciona bien mientras existan contactos. Pero si no hay dirección/correo electrónico, este elemento no se envía, lo que lleva a una excepción en RKMappingOperation#applyRelationshipMappings: value = [self.sourceObject valueForKeyPath: relationshipMapping.sourceKeyPath];

este momento, mi solución es utilizar @[email protected], pero espero que hay una mejor solución para esto ...

Muchas gracias!

EDIT: La excepción ocurre entonces si no se envían contactos en absoluto; entonces, el JKDictionary se parece a esto (de nuevo en RKMappingOperation#applyRelationshipMappings):

{ 
    contacts = ""; 
    name = myName; 
    id = 1; 
    ... 
} 
+0

¿Cuál es la excepción que se arroja? también, ¿qué versión de RestKit usas? – mja

+0

@mja: versión 0.9.3, la excepción es '[<__ NSCFConstantString 0x3fe1bc> valueForUndefinedKey:]: esta clase no es un valor clave que cumpla con la codificación para la dirección de la clave. – swalkner

+0

Intenté un caso similar en uno de mis proyectos basados ​​en RestKit y No tengo excepción alguna. Sin embargo, utilizo el último RestKit de git, rama principal. Intente lo siguiente (para verificar si obtiene la misma excepción): agregue un mapeo de relación a una clave inexistente, ej. "contacts.whatever" (mantener todas las asignaciones sin cambios) y analizar JSON que contiene tanto la dirección como el correo electrónico. – mja

Respuesta

0

Tal vez debería inicializar correctamente los objetos cuando se crean instancias? Tal vez comiences con todas tus propiedades en cero; luego, a medida que avanzas, completa las propiedades; y antes de comprometerse (o un mapa o lo que sea), verifique la integridad de los datos de los valores de sus propiedades ...