2016-09-14 9 views
0

私はiOSで新しく、Apple Storeにアプリを送信する際にIPv6のエラーが発生しました。私のコードは、私の質問は、NSURLSessionDataDelegatedidFinishLoadingのために使用するものであるデリゲートこのObjective CのNSURLSessionへのNSURLConnectionの変更方法は?

-(void)serverconnection{ 


    NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>" 
          "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" 
          "<soap:Body>" 
          "<Method Name xmlns=\"http://tempuri.org/\">" 
          "<UserId>%@</UserId>" 
          "</Method Name>" 
          "</soap:Body>" 
          "</soap:Envelope>",userid]; 




    NSURL *myNSUObj=[NSURL URLWithString:@"URL/webservice.asmx?op=MethodName"]; 
    // NSURLRequest *myNSURequestObj=[NSURLRequest requestWithURL:myNSUObj]; 

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:myNSUObj]; 
    NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]]; 

    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [theRequest addValue: @"http://tempuri.org/MethodName" forHTTPHeaderField:@"SOAPAction"]; 
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

    myNSUConnectionObj=[[NSURLConnection alloc]initWithRequest:theRequest delegate:self]; 
    NSLog(@"Data =%@",myNSUConnectionObj); 
    if(myNSUConnectionObj) 
    { 

     NSLog(@"successful connection"); 
     myNSMDataFromServer=[[NSMutableData alloc]init]; 
    } 
} 

#pragma mark - NSURLConnection Delegate 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 

    [myNSMDataFromServer setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

    [myNSMDataFromServer appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 

    NSXMLParser *myNSXMLParserObj=[[NSXMLParser alloc]initWithData:myNSMDataFromServer]; 
    myNSXMLParserObj.delegate=self; 
    [myNSXMLParserObj parse]; 
    NSLog(@"%@",myNSXMLParserObj.parserError); 
    NSLog(@"DataArray: %@",myDataNSMArray); 

    Keyarry=[responsedict valueForKey:@"Key"]; 
    NSLog(@"Assign Count =%@",Keyarry); 
    NSString *string = [NSString stringWithFormat:@"%@", [Keyarry objectAtIndex:0]]; 
    NSLog(@"String value =%@",string); 
    ibtassigncountlbl.text =string; 

    } 

#pragma mark - NSXMLParsing Delegate 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"FillBlocksNew"]) 
    { 
     myDataClassObj=[[mydata alloc]init]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 

    myMutableStringObj=[[NSMutableString alloc]initWithString:string]; 
    NSLog(@"Array String: %@",myMutableStringObj); 
    NSData *data = [myMutableStringObj dataUsingEncoding:NSUTF8StringEncoding]; 
    responsedict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
    NSLog(@"JSON DATA = %@",responsedict); 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    NSLog(@"DataArray: %@",myDataNSMArray); 
} 

のようなものです。私は下のこのデリゲートを使用

は:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task connectionDidFinishLoading:(NSURLConnection *)conn { }

それは私にエラーを示します。 Appleが提案したようにNSURLConnectionDataDelegateからNSURLSessionDataDelegateに変更する必要があります。

答えて

1

NSURL接続方法はIPv6に対応しています。 IPv6をサポートするためにそれを変更する必要はありません。私は問題があなたのURLにあると思う。アプリケーションのどこかで、(w.x.y.z)のようなハードコードされたIPv4アドレスを使用している可能性があります。そのようなアドレスを適切なドメイン名で削除すると、アプリケーションは合格になります。

また、最新のRachabilityクラスを使用する必要があります。

+0

URLを確認する方法Rachabilityのアドレスとバージョン – Muju

+0

URLを作成するコードをチェックインします。 180.170.160.150のようなハードコードされたIPアドレスを使用していますか?はいの場合は、hostname.api.comのような適切なドメイン名でホスト名を削除します。到達可能性については、最新の到達可能性をダウンロードしてください。彼らはIPv6に対応しています。 – Apurv

0

基本的にdelegate方法は、あなたがNSURLRequestをウッシングurlを要求するときに、それは、特定の時間にurlを要求された処理し、賢明に対応NSURLConnectionクラスのdelegateメソッドへの接続を行う二つのクラス間の接続を作成するために使用されています。そしてNSURLConnectionDelegateの-connection:didFailWithError :) connectionDidFinishLoadingからNSURLConnection一方

は、二つの要求(NSURLConnectionDataDelegateが終了したことを知らせる方法を有しています。どちらの方法も、特定の要求の完了を通知します。

NSURLConnectionの場合、URLを確認し、delegateメソッドを適切な方法で使用するだけで間違いはありません。

#pragma mark - 
#pragma mark - NSURLConnection Delegate Methods 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [webData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    if(!webData){ 
     webData = [[NSMutableData alloc] init]; 
    } 
    [webData appendData:data]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSString *returnString = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding]; 
    NSLog(@"response = %@",returnString); 
} 
+0

これは既に使用しているNSURLConnectionDataDelegatedです。 – Muju

関連する問題