public
Last active

Creating a query string from an NSDictionary.

  • Download Gist
NSDictionary+QueryStringBuilder.h
Objective-C
1 2 3 4 5 6 7 8
#import <Foundation/Foundation.h>
 
 
@interface NSDictionary (QueryStringBuilder)
 
- (NSString *)queryString;
 
@end
NSDictionary+QueryStringBuilder.m
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#import "NSDictionary+QueryStringBuilder.h"
 
 
@implementation NSDictionary (QueryStringBuilder)
 
- (NSString *)queryString
{
NSMutableString *queryString = nil;
NSArray *keys = [self allKeys];
if ([keys count] > 0) {
for (id key in keys) {
id value = [self objectForKey:key];
if (nil == queryString) {
queryString = [[[NSMutableString alloc] init] autorelease];
[queryString appendFormat:@"?"];
} else {
[queryString appendFormat:@"&"];
}
if (nil != key && nil != value) {
[queryString appendFormat:@"%@=%@", key, value];
} else if (nil != key) {
[queryString appendFormat:@"%@", key];
}
}
}
return queryString;
}
 
@end
gistfile1.m
Objective-C
1 2
NSDictionary *queryParameters = [NSDictionary dictionaryWithValuesAndKeys:1, @"page", nil, @"enabled", 25, @"size", nil];
[queryParameters queryString]; // This will return "?page=1&enabled&size=25"

The argument name for escapeString() should be unencodedString instead of string, as this is the name used on the CFURLCreateStringByAddingPercentEscapes call. My fork of this gist fixes this so the code compiles.

It also makes escapeString() a static function to avoid compiler warnings.

Thanks for the spots :)

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.