“initWithRequest:delegate:”已被弃用:在iOS 9.0中首先弃用 – 使用NSURLSession(请参阅NSURLSession.h)

我是新的目标C和使用iOS 9的Xcode 7.2,并得到这个警告“'initWithRequest:委托:'已弃用:首先在iOS9.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]; } 

提前致谢。

不知道上下文,是不可能说的。 这看起来像它可能是NSURLConnection类别的一部分,在这种情况下,你必须把它变成NSURLSession类别的一个实例方法(使它创build一个数据任务),然后转换你的整个代码库使用NSURLSession。

几个大障碍:

  • 你不能把NSURLSession放到使用NSURLConnection的代码中,因为委托方法是完全不同的。
  • NSURLConnection使用每个请求的委托,而NSURLSession使用每个会话的委托。

结果是,这可能是你的代码的一个重大改变,取决于你的委托方法是多么复杂。 如果你实际上并没有使用代表(或者没有对代理做太多的事情),那么这是一件小事。

或者只是做

 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" // offending line of code goes here #pragma clang diagnostic pop 

别担心。 如果NSURLConnection很快就会消失的话,我会感到惊讶的,因为如果有的话,会有多less代码会被破坏。 而如果我错了,至less你会在一段时间内把这个问题放在路上。 🙂

NSURLConnection在iOS 9中已被弃用。您可以使用自iOS 7以来的NSURLSession。

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

你也可以使用Alamofire等第三方库。