2016-04-01 16 views
2

私は目的Cで新しく、iOS 9 Xcode 7.2を使用してこの警告を出しています。 "initWithRequest:delegate: deprecated:iOS 9.0で非推奨になったもの - NSURLSession(NSURLSession.hを参照)を使用して解決する方法。私のコードは以下の通りです。'initWithRequest:delegate:'は廃止されました:iOS 9.0では廃止予定です - NSURLSessionを使用してください(NSURLSession.hを参照してください)

+(id)createGetConnectionWithName:(NSString*)strConnectionName_ 
         withUrl:(NSString *)pageUrl 
       parameterNames:(NSArray *)arrParamNames 
       parameterValues:(NSArray *)arrParamValues 
        delegate:(id)delegate 
{ 
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@",pageUrl]]; 

    NSMutableString *post =[NSMutableString string]; 
    for(int i=0;i<[arrParamNames count];i++) 
    { 
     if(i==[arrParamNames count]-1) 
     { 
      [post appendFormat:@"%@=%@",[arrParamNames objectAtIndex:i], 
      [arrParamValues objectAtIndex:i]]; 
     } 
     else 
     { 
      [post appendFormat:@"%@=%@&",[arrParamNames objectAtIndex:i], 
      [arrParamValues objectAtIndex:i]]; 
     } 
    } 
    //  if(![strConnectionName_ isEqualToString:APP_AUTH_CODE_NAME]) 
    //   [post appendFormat:@"&Key=%@",[self getAuthCode]]; 

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 

    // conn =[[NSURLConnection alloc] initWithRequest:request delegate:self] ; 
return [[self alloc] initWithRequest:request delegate:delegate]; 

} 

ありがとうございます。

+0

[NsurlConnection initWithRequestは重複している可能性があります](http://stackoverflow.com/questions/32647138/nsurlconnection-initwithrequest-is-deprecated) – vadian

答えて

2

NSURLConnectionは、あなたがまたAlamofireようないくつかのサードパーティのライブラリを使用することができるのiOS 7以降

NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request 
     completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 
     { 
      // do something with the data 
     }]; 
[dataTask resume]; 

を存在する代わりにNSURLSessionを使用することができますiOSの9で廃止されました。

5

コンテキストを知らなくても、言うことはできません。これは、NSURLConnectionのカテゴリの一部であるように見えます。その場合は、NSURLSessionのカテゴリのインスタンスメソッドに変換して(データタスクを作成させる)、コードベース全体を変換して使用する必要がありますNSURLSession。

大きなハードルのカップル:

  • デリゲートメソッドは完全に異なっているので、あなたはただ、NSURLConnectionを使用するコードにNSURLSessionを削除することはできません。
  • NSURLConnectionはリクエスト単位のデリゲートを使用しますが、NSURLSessionはセッション単位のデリゲートを使用します。

結果は、これはあなたのデリゲートメソッドはどのように複雑に応じて、潜在的にあなたのコードに大きなの変化であるということです。あなたが実際にデリゲートを使用していない(またはそれらをあまり使っていない)場合は、それは簡単な作業です。

それともは

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 

// offending line of code goes here 

#pragma clang diagnostic pop 

を行うと、それについて心配しないでください。 NSURLConnectionがすぐに消えたら、私は驚いています。もし私が間違っていれば、少なくともあなたはしばらくの間、問題を突き詰めてしまいます。 :-)

関連する問題