Al doblar una NSDictionary en una cadena utilizando bloques?
-
28-09-2019 - |
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];
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];