2

私のアプリでは、現在、各ビューコントローラーから http リクエストを送信しています。ただし、現在、リクエストを送信するためのメソッドを持つはずの1つのクラスを実装しています。

私の要求は、パラメーターの数によって異なります。たとえば、テーブルビューのリストを取得するには、カテゴリ、サブカテゴリ、フィルター、さらに 5 つのパラメーターを要求に入れる必要があります。

これは私の要求が今のように見えるものです:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
         [request setValue:verifString forHTTPHeaderField:@"Authorization"]; 
         [request setURL:[NSURL URLWithString:@"http://myweb.com/api/things/list"]];
         [request setHTTPMethod:@"POST"];
         [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

         NSMutableString *bodyparams = [NSMutableString stringWithFormat:@"sort=popularity"];
         [bodyparams appendFormat:@"&filter=%@",active];
         [bodyparams appendFormat:@"&category=%@",useful];
         NSData *myRequestData = [NSData dataWithBytes:[bodyparams UTF8String] length:[bodyparams length]];
[request setHTTPBody:myRequestData]

私の最初のアイデアは、これらのパラメーターをすべて受け入れるメソッドを作成することでした。不要なものは nil になり、nil ではないものをパラメーター文字列 (ms) に追加してテストします。

ただし、これはかなり非効率的です。後で、パラメーターの値が格納された辞書を渡すことを考えていました。Android の Java で使用される nameValuePair を持つ配列リストのようなもの。

よくわかりません。辞書からキーとオブジェクトを取得するにはどうすればよいですか

    -(NSDictionary *)sendRequest:(NSString *)funcName paramList:(NSDictionary *)params 
{
  // now I need to add parameters from NSDict params somehow
  // ?? confused here :)   
}
4

1 に答える 1

7

次のような辞書から params 文字列を作成できます。

/* Suppose that we got a dictionary with 
   param/value pairs */
NSDictionary *params = @{
    @"sort":@"something",
    @"filter":@"aFilter",
    @"category":@"aCategory"
};

/* We iterate the dictionary now
   and append each pair to an array
   formatted like <KEY>=<VALUE> */      
NSMutableArray *pairs = [[NSMutableArray alloc] initWithCapacity:0];
for (NSString *key in params) {
    [pairs addObject:[NSString stringWithFormat:@"%@=%@", key, params[key]]];
}
/* We finally join the pairs of our array
   using the '&' */
NSString *requestParams = [pairs componentsJoinedByString:@"&"];

requestParams文字列をログに記録すると、次のようになります。

filter=aFilter&category=aCategory&sort=something

AFNetworkingPSこの種の操作に最適なソリューションである@rckoenesに完全に同意します。

于 2012-12-19T16:04:27.313 に答える