0

AFNetworking フレームワークを使用してリクエストに送信するように構築しようとしてNSDictionnaryいますが、適切に行う方法についてかなり混乱しているようです。

サーバーが期待しているものは次のとおりです。

{
    "limit":10,
    "filters":
    [
        {"field":"owner","operator":"EQUAL","value":"ownerId","type":"integer"},
        {"field":"date","operator":"GE","value":"30 Jun 2010 00:00:00","type":"date"},
    ],
    "order":[{"field":"date","order":"ASC"}],
    "page":0
}

私がやろうとしているのは(それが正しい方法であるかどうかはよくわかりません)、次のようなNSDictionaryを構築することです:

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"10", @"chunkSize", 
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"owner", @"field", @"EQUAL", @"operator", @"ownerId", @"value", @"integer", @"type", nil],
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"date", @"field", @"GE", @"operator", @"30 Jun 2010 00:00:00", @"value", @"date", @"type", nil],
                                    nil], @"filters",
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"date", @"field", @"ASC", @"order", nil],
                                    nil], @"order",
                                @"0", @"page",
                                nil];

しかし、ビューの読み込み中に次のエラーが発生しました。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '+[NSDictionary dictionaryWithObjectsAndKeys:]: second object of each pair must be non-nil

パラメータを適切に構築するのに失敗していることはわかっていますが、何度か試行してもうまくいきません。誰でも助けることができますか?[]さらに、ここで実装しなければならないとの違いがよくわかりません{}{}これは辞書用と配列用であると読みましたが[]、私の場合、それを翻訳する方法がよくわかりません。

4

2 に答える 2

2

角かっこ[]は配列を表し、中かっこ{}はオブジェクト (このコンテキストでは辞書) を表します。必要な構造を作成するには:

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
    @"10", @"chunkSize", 
    [NSArray arrayWithObjects:
         [NSDictionary dictionaryWithObjectsAndKeys:@"owner", @"field", @"EQUAL", @"operator", @"ownerId", @"value", @"integer", @"type", nil],
         [NSDictionary dictionaryWithObjectsAndKeys:@"date", @"field", @"GE", @"operator", @"30 Jun 2010 00:00:00", @"value", @"date", @"type", nil],
         nil], @"filters",
    [NSArray arrayWithObjects:
         [NSDictionary dictionaryWithObjectsAndKeys:@"date", @"field", @"ASC", @"order", nil],
         nil], @"order",
    @"0", @"page",
    nil];
于 2012-07-11T14:20:25.083 に答える
2

あなたの間違いは、3 行目から始まる辞書の値を配列でラップする必要があることです。

少なくとも、Objective-C の配列とハッシュ リテラルが主流になるまでは、複雑な辞書を作成するための私の好みの方法は、NSMutableDictionary. あなたの場合:

NSMutableDictionary *mutableParameters = [NSMutableDictionary dictionary];
[mutableParameters setValue:@"10" forKey:@"limit"];
// ...

NSMutableArray *mutableFilters = [NSMutableArray array];
NSMutableDictionary *mutableOwnerFilterDictionary = [NSMutableDictionary dictionary];
[mutableOwnerFilterDictionary setValue:@"owner" forKey:@"field"];
// ...
[mutableFilters addObject:mutableOwnerFilterDictionary]; 

[mutableParameters setValue:mutableFilters forKey:@"filters"];
// ...

また、に設定して JSON として送信していることを確認しAFJSONParameterEncodingてくださいAFHTTPClient

于 2012-07-11T14:21:56.430 に答える