2016-03-30 30 views
0

Yuvalanmış değişebilir sözlüğü AFNetworking 3.0'da POST isteğinde parametreler olarak göndermeye çalışıyorum.İç içe NSMutableDictionary AFNetworking 3.0'da POST isteği için parametre olarak gönderme

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

sözlük aşağıdaki gibi hazırlanmıştır: Burada

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 istek: Ancak

[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]; 
     }); 
    }]; 

, aşağıda alıyorum İşte

benim SessionManager ayarları ise hata:

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)"} 

MiniDict'ı "Food_UserLogin" anahtarına yollamıyorsam, başarı yanıtı alıyorum ancak bu parametreyi sözlük oluştururken sorun oluşturuyor. Neyin yanlış olduğuna dair herhangi bir öneriniz var mı?

P.S. Sunucu tarafında değişiklik yapmak istemem.

+0

Niçin, neden değişebilir olması gerekiyor? – trojanfoe

+0

Uygun json dizgisini dönüştürmek için bir tane okuyabilirim, bir değişebilir sözlük –

+0

göndermek gerekiyor Ve JSON ile ilgili soru nedir? – trojanfoe

cevap

0

MiniDict'ı JSONString'e dönüştürerek ve bu JSONString'i "Food_UserLogin" öğesinde değer olarak göndererek sorunu düzeltildi.

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:miniDict options:0 error:nil]; 
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
[paramDict setObject:jsonString forKey:@"Food_UserLogin"]; 
İlgili konular