web-dev-qa-db-ja.com

手動で文字列を作成する代わりに、パラメータのNSDictionaryをNSURLRequestにアタッチする方法はありますか?

AFNetworkingを使用すると、NSDictionaryパラメータをリクエストに追加でき、リクエストに追加されます。したがって、?q=8&home=8888GETリクエストを実行したい場合は、@{@"q": @"8", @"home": @"8888"}のようなNSDictionaryを非常に簡単に作成します。

NSURLSession/NSURLConnection/NSURLRequestでこれを行う方法はありますか?

JSONデータを追加するためにNSJSONSerializationを使用できることはわかっていますが、URLのGETパラメータとしてそれらを必要とする場合はどうなりますか?カテゴリを追加するだけですか?

16
user2005643

これを行うには、NSURLComponentsおよびNSURLQueryItemsを使用してURLを更新します。次の例では、NSMutableURLRequestにURLパラメータがすでに設定されていると想定しています。 NSDictionary paramsからの各パラメーターを含めるために使用する前に変更できます。各パラメーターは、書き込まれる前にエンコードされることに注意してください。

NSURLComponents *url = [[NSURLComponents alloc] initWithURL:request.URL resolvingAgainstBaseURL:YES];
NSMutableArray *queryItems = NSMutableArray.new;
[params enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *stop) {
    [queryItems addObject:[NSURLQueryItem queryItemWithName:name
                           value:[value stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]]];
            }];
url.queryItems = queryItems;
request.URL = url.URL;
10
Peter DeWeese