2010-10-08 1 views
1

Я уверен, что есть способ сделать это с помощью блоков, но я не могу понять это. Я хочу превратить NSDictionary в строку параметров в стиле url. Если у меня есть NSDictionary, который выглядит следующим образом:Превращение NSDictionary в строку с использованием блоков?

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

Тогда как бы я превратить это в строку, которая выглядит следующим образом:

"color=blue&size=large" 

EDIT

Спасибо для подсказок ниже. Это должно сделать это:

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

Возможный дубликат http://stackoverflow.com/questions/3873714/parse-nsdictionary-to-a-string-with-custom-separators/ – Emil

ответ

6

Совершенно так же решение, но без подстроки:

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

Я думаю, вы должны удалить & внутри блока. – FRotthowe

+0

Точный! Спасибо ! (кто изобретает копию/пасту?) –

2

Создайте изменяемую строку, а затем повторите поиск словаря каждой клавишей. Посмотрите значение для этого ключа и добавьте key=value& в строку. Когда вы закончите этот цикл, удалите последний &.

Я полагаю, это будет подаваться через URL, вы также хотите, чтобы иметь какой-то метод, который кодирует ваши строки, в случае, если они содержат элементы, как & или + и т.д.

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]; 

 Смежные вопросы

  • Нет связанных вопросов^_^