2016-07-03 9 views
0

내 코드가 잘못된 점을 알려주려면 여기에 찬성이 필요합니다. 2.x에서 3.x로 마이그레이션하려고하는데 편두통이 생깁니다.AFNetworking 3.0 게시 문제

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
NSDictionary *parameters = @{@"email": email, @"password": password}; 
[manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
    NSData *jsonData = [responseStr dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData 
                 options:0 
                  error:nil]; 
    if ([[json objectForKey:@"success"] intValue] != 1) { 
     UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"" message:self.error_login delegate:nil cancelButtonTitle:self.continueButton otherButtonTitles:nil]; 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     [alert show]; 
    } else { 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     AccountViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"account"]; 
     NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]]; 
     [viewControllers removeLastObject]; 
     [viewControllers addObject:vc]; 
     [[self navigationController] setViewControllers:viewControllers animated:NO]; 
    } 
} failure:^(NSURLSessionDataTask *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

서버 측에서 매개 변수가 비어 있음을 계속 보여줍니다.

모든 안내가 크게 감사 할 것입니다. = D

+0

매개 변수 설정 코드가 올바르게 표시됩니다. 'email'과'password'에 값이 있다는 것을 확신합니까? –

+0

이 결과를 출력 할 수 있습니까? '매개 변수' –

+0

간단한 솔루션 사용은 다음과 같습니다 .... http : //stackoverflow.com/questions/34561215/afnetworking-3-0-migration-how-to-post-with-headers-and -http-body/36299737 # 36299737 – Vvk

답변

0

게시물 요청을 작성하는 코드가 정확합니다. 내 자신의 서버에서 그것을 시도하고 예상대로 작동합니다. emailpassword의 값이 nil이 아닌지 확인하고 서버 코드도 확인하십시오.

AFJSONSerializer을 사용하면 완료 코드를 좀 더 쉽게 작성할 수 있습니다. 당신은 AFNetworking이를 돌봐 이후 responseObject 직접 변환 할 필요가 없습니다 :

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
NSDictionary *parameters = @{@"email": email, @"password": password}; 
[manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSDictionary *json = responseObject; 

    if ([[json objectForKey:@"success"] intValue] != 1) { 
     UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"" message:self.error_login delegate:nil cancelButtonTitle:self.continueButton otherButtonTitles:nil]; 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     [alert show]; 
    } else { 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     AccountViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"account"]; 
     NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]]; 
     [viewControllers removeLastObject]; 
     [viewControllers addObject:vc]; 
     [[self navigationController] setViewControllers:viewControllers animated:NO]; 
    } 
} failure:^(NSURLSessionDataTask *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
+0

Xcode에서 값을 확인할 때 값이 0이 아니지만 서버에 아무 것도 게시되지 않았 음을 보여줍니다. AFJSONResponseSerializer에 대한 조언을 구하십시오. – SilverHood

+0

서버 코드를 표시 할 수 있습니까? –

0

AFNetworking 3.0 포스트 방법 코드를. 참고 : -이 줄을 .h 파일에 넣으십시오.

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

: -하는 .m 파일에이 코드를 넣습니다.

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

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:error]; 
    NSString *argString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    return argString; 
}]; 
//here 'kBaseURL' is Web services base URL and servicesName is Web Services API name, You have to pass from declaration side. 
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:NSJSONReadingMutableContainers 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); 
    } 
}]; 
}