2010-10-08 5 views
1

Je suis sûr qu'il y a un moyen de le faire en utilisant des blocs, mais je ne peux pas le comprendre. Je veux transformer un NSDictionary en chaîne de paramètres de style url. Si j'ai un NSDictionary qui ressemble à ceci:Transformer un NSDictionary en chaîne en utilisant des blocs?

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

Alors comment pourrais-je transformer en une chaîne qui ressemble à ceci:

"color=blue&size=large" 

EDIT

Merci pour les indices ci-dessous. Cela devrait le faire:

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

double possible de http://stackoverflow.com/questions/3873714/parse-nsdictionary-to-a-string-with-custom-separators/ – Emil

Répondre

6

Tout à fait même solution, mais sans la sous-chaîne:

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

Je pense que vous devriez retirer la & à l'intérieur du bloc. – FRotthowe

+0

Exact! Je vous remercie ! (qui invente copier/coller?) –

2

Créer une chaîne mutable, puis itérer le dictionnaire obtenant chaque clé. Recherchez la valeur de cette clé et ajoutez le key=value& à la chaîne. Lorsque vous avez terminé cette boucle, supprimez la dernière &.

Je présume que cela va être alimenté par une URL, vous pouvez également avoir une méthode qui code vos chaînes, au cas où ils contiennent des éléments comme & ou +, etc.

2
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]; 
Questions connexes