Pregunta

Tengo una NSDictionary con NSStrings

Algunos de los valueForKey: @ "clave" no tienen entrada por lo que es (null)

NSMutableString* addressDictionaryToString = [NSMutableString string];  // use mutable string!
for (NSDictionary* item in address) {     // use fast enumeration!
        [addressDictionaryToString appendFormat:@"%@, %@, %@, %@",
         [item objectForKey:@"Street"],         
         [item objectForKey:@"City"],
         [item objectForKey:@"State"],
         [item objectForKey:@"ZIP"]
         ];
    NSLog(@"MutableString: %@", addressDictionaryToString);
}

Así que quieren construir un filtro de NSMutableString pero esas llaves que son nulas. Algunas ideas?

ACTUALIZACIÓN :::::

Básicamente quiero que mi cadena resultante para que parezca

1 Infinite Loop, Cupertino, CA, 95014 (si todos los campos están disponibles)

Si Im perdiendo la calle después

Cupertino, CA, 95014

Si me falta el Estado después

1 Infinite Loop, Cupertino, 95014

Si sólo tengo el estado entonces se debe imprimir

CA

(nótese que no hay comas en el último elemento)

¿Fue útil?

Solución

¿Qué hay de comprobar si hay un valor de la clave?

NSMutableString * addressDictionaryToString = [NSMutableString string];
for (NSDictionary * item in address)
{
    if ([item objectForKey:@"Street"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"Street"]];
    if ([item objectForKey:@"City"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"City"]];
    if ([item objectForKey:@"State"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"State"]];
    if ([item objectForKey:@"ZIP"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"ZIP"]];
    NSLog(@"MutableString: %@", addressDictionaryToString);
}

La cosa es, en su última pregunta, dijo que su objetivo era crear un archivo CSV. No es CSV técnicamente válida si sus filas tienen diferentes números de campos y no hay forma fiable para identificar a cada uno.

En lugar de ello, es posible que intente lo siguiente:

NSMutableString * addressDictionaryToString = [NSMutableString string];
for (NSDictionary * item in address)
{
    [addressDictionaryToString appendFormat:@"%@,", 
     ([item objectForKey:@"Street"]) ? [item objectForKey:@"Street"] : @"" ];
    // ...
    NSLog(@"MutableString: %@", addressDictionaryToString);
}

comprueba la presencia de un valor y se inserta ese valor si hay uno, o simplemente una cadena vacía (que resulta en "valor, valor ,, valor ..."). Asimismo, recuerda que no debería haber un espacio después de la coma, por lo que me he quitado de este ejemplo.

Otros consejos

No exactamente seguro de lo que estamos tratando de hacer que esto:

NSDictionary *d=[NSDictionary dictionaryWithObject:[NSNull null] forKey:@"ns"];
NSString *n=[@"Steve " stringByAppendingFormat:@"%@",[d objectForKey:@"ns"]];
NSLog(@"%@",n);

... impresiones:

Steve <null>

Si la clave no existe, entonces se producirá una excepción cuando se trata de obtener el valor de la clave inexistente. El único recurso que en este caso es para comprobar si la clave en cada diccionario antes de intentar utilizarlo para recuperar un valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top