2016-08-22 2 views
-1

나는 다음과 같은 방법으로 내 애플 리케이션에서 데이터를 사전으로 변환했지만 json 개체가 nil이라는 것을 보여준다.목표 C에서 JSON 직렬화 된 데이터를 NSDictionary로 변환하는 방법은 무엇입니까?

"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 please please @ Larme –

답변

0

여기서는 AFNetworking 3.0을 사용하고 있습니다. 그래서 AFNetworking 3.0 버전에서 "POST"메서드 코드를 제공 할 것입니다.

1 단계 - 하나의 NSObject 클래스를 만들고이 메소드를 .h 파일에 기록하십시오.

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

2 단계 : - 여기하는 .m 파일 에서이 코드를 기록합니다 "kBaseURL는"웹 서비스 URL 및 서비스의 "서비스 명"이름을 의미한다.

+ (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

좋아, 좋아 ... 나에게 오류 또는 오류 스냅을 보내 주면 알아낼 것입니다. @ 사라바나 쿠마 –

관련 문제