2016-08-10 8 views
0

iTunes 앱이 거부되었습니다.앱 거부 NSUrlConnection IPv6 네트워크 문제 iOS

이유 : 아이폰 으로 검토 할 때 우리는 당신의 응용 프로그램에서 하나 개 이상의 버그를 발견

실행 아이폰 OS와 Wi-Fi를 9.3.4는 IPv6 네트워크에 연결되어 있습니다.

특히, 앱 콘텐츠를로드하지 못했습니다.

우리는 NAT64 네트워크 (mac에서 설정)에서 테스트했으나 정상적으로 작동하지만 Apple 검토 팀에서는 IPv6 네트워크에 문제가 있습니다.

NSURLConnection을 사용하여 웹 서비스를 호출했지만 응답이 없습니다.

NSURLConnection:connectionDidFinishLoading:가 호출되지만 IPv6 네트워크에있는 NSData 응답 전무지고, 그것은 전무 receivedData 땜에 오류를 분석 점점 IPv4 네트워크

JSON 파싱 코드

NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions | NSJSONReadingAllowFragments | NSJSONReadingMutableContainers error:&error]; 

에서 잘 일하고있어 : 데이터를 읽을 수 없습니다 올바른 형식이 아니기 때문에

IPv4 네트워크에서도 잘 작동합니다. IPv6 connectionDidFinishLoading에서도 호출되었지만 왜 응답이 없습니까?

답변

3

앱을 변경하십시오. NSURLSession. 응답을 받으려면이 위임 메서드를 사용하십시오.

service url = "여기에서 URL을 구문 분석하십시오."; 당신은 그냥 복사 및 붙여 넣기이 위양 방법에

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]]; 
    NSURL * url = [NSURL URLWithString:serviceurl]; 
    NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url]; 
    NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:urlRequest]; 
    [dataTask resume]; 

당신의 connectionDidFinishLoading, connectionDidReceiveResponseconnectionDidReceiveData, connectionDidFailWithError은 (NSURLSession *) 세션 작업의 다른 부분에 있어야합니다 :

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask 
    didReceiveResponse:(NSURLResponse *)response 
    completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler 
    { 
     NSLog(@"### handler 1"); 
     [self.responseData setLength:0]; 
     completionHandler(NSURLSessionResponseAllow); 
    } 

    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask 
     didReceiveData:(NSData *)data 
    { 


    } 
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task 
    didCompleteWithError:(NSError *)error 
    { 
     if(error == nil) 
     { 

      NSLog(@"Download is Succesfull"); 
     } 
     else 
     { 
      NSLog(@"Error %@",[error userInfo]); 

     } 
    } 

나는이에 도움이된다 생각 당신.