0

次のエラーメッセージが表示され続けます:2013-01-22 01:44:43.091 Section3App2[16625:6703] -[__NSCFArray length]: unrecognized selector sent to instance 0x23a48780AFNetworkingリクエストを送信した後。リクエストの背後にある考え方は、POSTを介してJSONリクエストボディを使用してRESTAPIにPOSTリクエストを送信することです。私は一日中これをいじっていて、何が問題を引き起こしているのか理解できないようです。

コード

NSString * string = @ "[{\" code \ ":\" 105N14560 \ "}]";
    NSString * jsonString = string;
    NSData * data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError * error = nil;
    id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
        [リクエストsetHTTPBody:json];
       // [request setValue:[NSString stringWithFormat:@ "%d"、string.length] forHTTPHeaderField:@ "Content-Length"];
        NSLog(@ "リクエスト本文:%@"、request.HTTPBody);
       // NSLog(@ "json:%@"、json);
// if(!json){
////エラーを処理します
// NSLog(@ "fail");
//}
        AFJSONRequestOperation * operation2 = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest * request、NSHTTPURLResponse * response、id JSON){
            NSLog(@ "JSON:%@"、JSON);
        } failure:nil];
        [operation2開始];

そのコードはリクエスト本文を正常に作成しますが、ブロックを実行しようとするとエラーがスローされ、完全に困惑します。すべての助けをいただければ幸いです。

4

1 に答える 1

3

最初の行で行っているように、JSON 文字列を自分で作成しようとしないでください。NSJSONSerializationJSON 互換の Obj-C データ構造 (NSDictionaryまたは などNSArray) からオブジェクトに直接変換しNSDataて、要求の本文として使用するために使用します。例えば:

NSDictionary *JSON = [NSDictionary dictionaryWithObject:@"105N14560" forKey:@"code"];
id JSONData = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:error];

結果のJSONDataオブジェクトHTTPBodyは、リクエストの とリクエストの の両方に使用する必要がありますcontent-length。完全な例を次に示します。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; // URL = wherever the request should be sent to 

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

id JSONData = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:error];
if (JSONData) {
    [request setValue:[NSString stringWithFormat:@"%d",[(NSData *)JSONData length]] forHTTPHeaderField:@"content-length"];
    [request setHTTPBody:JSONData];
}

これは単にリクエストを作成するだけです。残りの部分は を使用して簡単に行うことができますAFNetworking。使用AFJSONRequestOperationする場合は、既に行ったようにリクエストを渡すだけです。

于 2013-01-22T14:24:32.523 に答える