Pregunta

Estoy seguro de que hay una manera de hacer esto utilizando bloques, pero no puedo entenderlo. Quiero convertir un NSDictionary en cadena de estilo url de parámetros. Si tengo una NSDictionary que tiene este aspecto:

dict = [NSDictionary dictionaryWithObjectsAndKeys:@"blue", @"color", @"large", @"size", nil]];

A continuación, ¿cómo iba a convertir eso en una cadena que es similar al siguiente:

"color=blue&size=large"

Editar

Gracias por las siguientes pistas. Esto debe hacerlo:

NSMutableString *parameterString;
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [parameterString appendFormat:@"%@=%@&", key, obj];
}];
parameterString = [parameterString substringToIndex:[string length] - 1];
¿Fue útil?

Solución

Muy misma solución pero sin la subcadena:

NSMutableArray* parametersArray = [[[NSMutableArray alloc] init] autorelease];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [parametersArray addObject:[NSString stringWithFormat:@"%@=%@", key, obj]];
}];
NSString* parameterString = [parametersArray componentsJoinedByString:@"&"];

Otros consejos

Crea una cadena mutable, a continuación, iterar el diccionario conseguir cada tecla. Busque el valor de esa clave, y añadir la key=value& a la cadena. Cuando termine ese bucle, y eliminar el último.

supongo que esto va a ser alimentado a través de una URL, también tendrá que tener algún método que codifica las cadenas, en caso de que contengan elementos como Y o +, etc.

NSMutableString* yourString = @"";

for (id key in dict) {
     [yourString appendFormat:@"%@=%@&", key, ((NSString*)[dict objectForKey:key])];
}

NSRange r;
r.location = 0;
r.size = [yourString length]-1;
[yourString deleteCharactersInRange:r];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top