【问题标题】:'initWithRequest:delegate:' is deprecated: first deprecated in iOS 9.0 - use NSURLSession(see NSURLSession.h)'initWithRequest:delegate:' 已弃用:首先在 iOS 9.0 中弃用 - 使用 NSURLSession(参见 NSURLSession.h)
【发布时间】:2016-05-01 15:46:06
【问题描述】:

我是 Objective C 的新手,使用 iOS 9 Xcode 7.2 并收到此警告“'initWithRequest:delegate:' is deprecated: first deprecated in iOS 9.0 - use NSURLSession(see 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];

}

提前致谢。

【问题讨论】:

标签: ios nsurlsession


【解决方案1】:

不知道上下文,是不可能说出来的。这看起来可能是 NSURLConnection 类别的一部分,在这种情况下,您必须将其转换为 NSURLSession 类别中的实例方法(使其创建数据任务),然后将整个代码库转换为使用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 很快就消失了,我会感到惊讶,因为如果这样做的话会破坏多少代码。如果我错了,至少你会在一段时间内解决这个问题。 :-)

【讨论】:

    【解决方案2】:

    NSURLConnection 在 iOS 9 中已弃用。您可以使用 NSURLSession 代替,它自 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];
    

    您还可以使用一些 3rd 方库,例如 Alamofire

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多