AFHTTPClient の getPath に
[client getPath:@"user/tasks" parameters:@{ @"status": @[@"completed", @"new"] } success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }];
という風に、配列を含んだ辞書を渡すと、リクエストのクエリ文字列は
status[]=completed&status[]=new
になる。Rails なんかでよく見る書式だ。
さてここで問題。 リクエストのクエリ文字列を
status=completed&status=new
にしたい場合はどうすればいい? ちなみに NSDictionary のキーは重複が許されない。
答え、というか自分が採用したのは
[client getPath:@"user/tasks?status=completed&status=new" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }];
という風に path にあらかじめクエリを埋め込んでしまう方法。
AFHTTPClient の getPath は、path に既にクエリが含まれている場合、parameters をクエリ文字列に変換し & で後ろに足してくれる。ソースコード読んで知った。
ていうか今回、上記のクエリを送信する必要がある Web API に遭遇したんだけど、 「なんで status[] じゃないんだよ」って思ったね。