iOS8およびOSX10.10で導入されたのはNSURLQueryItem
、クエリの作成に使用できるです。NSURLQueryItemのドキュメントから:
NSURLQueryItemオブジェクトは、URLのクエリ部分にあるアイテムの単一の名前と値のペアを表します。NSURLComponentsオブジェクトのqueryItemsプロパティでクエリアイテムを使用します。
最初に以下を作成することにより、URLからクエリアイテムを取得できますNSURLComponents
。
NSURL *url = [NSURL URLWithString:@"http://stackoverflow.com?q=ios&count=10"];
NSURLComponents *components = [NSURLComponents componentsWithURL:url
resolvingAgainstBaseURL:YES];
for (NSURLQueryItem *item in components.queryItems) {
NSLog(@"name: %@, value: %@", item.name, item.value);
}
// name: q, value: ios
// name: count, value: 10
の戻り値-queryItems
は辞書ではなく配列であることに注意してください。これは、以下が有効なURLであるためです。2つの同一の「キー」に注意してくださいfoo
。
http://google.com?foo=bar&foo=baz
クエリアイテムを介してURLを作成するには、指定された初期化子queryItemWithName:value:
を使用し、それらをに追加してNSURLComponents
を生成しNSURL
ます。例えば:
NSString *urlString = @"http://stackoverflow.com";
NSURLComponents *components = [NSURLComponents componentsWithString:urlString];
NSURLQueryItem *search = [NSURLQueryItem queryItemWithName:@"q" value:@"ios"];
NSURLQueryItem *count = [NSURLQueryItem queryItemWithName:@"count" value:@"10"];
components.queryItems = @[ search, count ];
NSURL *url = components.URL; // http://stackoverflow.com?q=ios&count=10
疑問符とアンパサンドが自動的に処理されることに注意してください。NSURL
パラメータの辞書からの作成は、次のように簡単です。
NSDictionary *queryDictionary = @{ @"q": @"ios", @"count": @"10" };
NSMutableArray *queryItems = [NSMutableArray array];
for (NSString *key in queryDictionary) {
NSURLQueryItem *item = [NSURLQueryItem queryItemWithName:key
value:queryDictionary[key]];
[queryItems addObject:item];
}
components.queryItems = queryItems;
また、 NSURLQueryItemsを使用したNSURLの構築という詳細についてのブログ投稿も作成しました。