0

AFNetworking 3.0 の POST 要求で、ネストされた変更可能な辞書をパラメーターとして送信しようとしています。

ここに私のセッションマネージャーの設定があります:

self.requestSerializer = [AFJSONRequestSerializer serializer];
self.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

辞書は次のように作成されます。

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
    f.numberStyle = NSNumberFormatterNoStyle;
    NSNumber *myNumber = [f numberFromString:self.userMobNoTf.text];

    NSString *UDID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

    NSMutableDictionary *miniDict = [NSMutableDictionary dictionary];
    [miniDict setObject:[NSNumber numberWithInteger:0] forKey:@"ID"];
    [miniDict setObject:self.userIDTf.text forKey:@"UserId"];
    [miniDict setObject:self.userNameTf.text forKey:@"Name"];
    [miniDict setObject:self.userPasswordTf.text forKey:@"Password"];
    [miniDict setObject:UDID forKey:@"IMEI"];
    [miniDict setObject:@"1.0" forKey:@"AppVersion"];
    [miniDict setObject:self.userNameTf.text forKey:@"CreatedBy"];
    [miniDict setObject:myNumber forKey:@"MobileNo"];
    [miniDict setObject:[NSNumber numberWithInt:1] forKey:@"isActive"];

    NSMutableDictionary *paramDict = [NSMutableDictionary dictionary];
    [paramDict setObject:self.userNameTf.text forKey:@"UserName"];
    [paramDict setObject:self.userPasswordTf.text forKey:@"Password"];
    [paramDict setObject:self.userIDTf.text forKey:@"UserId"];
    [paramDict setObject:myNumber forKey:@"MobileNo"];
    [paramDict setObject:UDID forKey:@"Imei"];
    [paramDict setObject:[miniDict mutableCopy] forKey:@"Food_UserLogin"];

POST リクエストは次のとおりです。

[appD.sessionManager POST:@"FoodSignUpSave" parameters:paramDict progress:^(NSProgress * _Nonnull uploadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [radialHUD dismiss];
        });

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [radialHUD dismiss];

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:error.description delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
            [alert show];
        });
    }];

ただし、以下のエラーが発生しています。

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x174660fc0 {NSDebugDescription=Invalid value around character 0., NSUnderlyingError=0x174241bc0 "Request failed: bad request (400)"}

キー「Food_UserLogin」で miniDict を送信しない場合、成功の応答が得られますが、辞書であるためこのパラメーターを配置すると問題が発生します。何が間違っているかについての提案はありますか?

PSサーバー側で変更を加えたくありません。

4

1 に答える 1

1

miniDict を JSONString に変換し、この JSONString を「Food_UserLogin」の値として送信することで問題を修正しました。

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:miniDict options:0 error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[paramDict setObject:jsonString forKey:@"Food_UserLogin"];
于 2016-03-30T09:50:01.873 に答える