2016-08-22 4 views
-1

Я использовал следующий метод для преобразования данных в словарь в моем приложении, но он показывает, что объект json был равен нулю.Как преобразовать сериализованные данные JSON в NSDictionary в Objective C?

Печать «jsonObject is null». Есть проблемы с "error: nil".

- (void)postNonceToServer:(NSString *)paymentMethodNonce { 
// Update URL with your server 


AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; 



NSDictionary *parameters = @{@"payment_method_nonce":paymentMethodNonce,@"amount":amountStr,@"tripid":tripIdStr,@"currencycode":currencyStr}; 

[manager POST:@"http:url.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    //NSArray *response = responseObject; 
    //response = responseObject; 

    NSLog(@"responseObject is %@",responseObject); 

    jsonObject=[NSJSONSerialization 
       JSONObjectWithData:responseObject 
       options:NSJSONReadingMutableLeaves 
       error:nil]; 
    NSLog(@"jsonObject is %@",jsonObject); 


    } 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

      NSLog(@"Error: %@", error); 
     }]; 

} 
+1

Нет, нет ошибки «с ошибкой: nil», это разрешено, но это может явно помочь отладить вашу проблему и избежать использования параметров ошибок не рекомендуется. Это похоже на скрытие предупреждений в вашем автомобиле. Пока это работает, все в порядке. Но когда это не так ... Также, если вы покажете 'responseObject' (преобразованный ранее в NSString), мы могли бы помочь. – Larme

+0

Это может произойти, если объектом responseObject является 'NSASCIIStringEncoding'. 'JSONObjectWithData' требует' NSUTF8StringEncoding'. Это то, что происходило со мной на WatchOS2.2. – Brandon

+0

Можете ли вы сказать подробности, пожалуйста, @ Larme –

ответ

0

Здесь я использую AFNetworking 3.0. Поэтому я дам вам код метода «POST» в версии AFNetworking 3.0.

Шаг 1: - Создайте один класс NSObject и запишите этот метод в файле .h.

+ (void)requestPostUrl: (NSString *)serviceName parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure; 

Шаг 2: - Запишите этот код в файле .m здесь "kBaseURL" означает URL веб-службы и "SERVICENAME" имя службы.

+ (void)requestPostUrl: (NSString *)serviceName parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure { 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) { 

    //Here your data converting in JSON. 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:error]; 
    NSString *argString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    return argString; 
}]; 

NSString *strService = [NSString stringWithFormat:@"%@%@",kBaseURL,serviceName]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
//[SVProgressHUD showWithStatus:@"Please wait..."]; 
[SVProgressHUD show]; 
[manager POST:strService parameters:dictParams progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 


    if([responseObject isKindOfClass:[NSDictionary class]]) { 

     if(success) { 
      [SVProgressHUD dismiss]; 
      success(responseObject); 
     } 
    } 
    else 
    { 
     NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; 
     if(success) { 
      [SVProgressHUD dismiss]; 
      NSLog(@"POST Response : %@",response); 
      success(response); 
     } 
    } 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

    if(failure) { 
     [SVProgressHUD dismiss]; 
     failure(error); 
    } 
}]; 
} 
+0

Не работает Bro, спасибо за respoonse @ Anand Nanavaty –

+0

Хорошо, пришлите ... пришлите мне свою ошибку или короткую короткую короткую ссылку, я выясню. @Saravanakumar –

Смежные вопросы