Превращение NSDictionary в строку с использованием блоков? - PullRequest
1 голос
/ 08 октября 2010

Я уверен, что есть способ сделать это, используя блоки, но я не могу понять это. Я хочу, чтобы превратить NSDictionary в строку параметров в стиле URL. Если у меня есть 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];

Ответы [ 3 ]

6 голосов
/ 08 октября 2010

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

NSMutableArray* parametersArray = [[[NSMutableArray alloc] init] autorelease];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [parametersArray addObject:[NSString stringWithFormat:@"%@=%@", key, obj]];
}];
NSString* parameterString = [parametersArray componentsJoinedByString:@"&"];
2 голосов
/ 08 октября 2010
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];
2 голосов
/ 08 октября 2010

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

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

...