【问题标题】:Migrating to NSURLSession from NSURLConnection incompatible pointer types从 NSURLConnection 不兼容的指针类型迁移到 NSURLSession
【发布时间】:2015-10-05 12:28:22
【问题描述】:

我正在从NSURLConnection 移动到NSURLSession,并遇到了保存URL 请求值的NSMutableURLRequest 的问题。

关于如何在NSURLSession 中保留此信息而不出现此错误的任何想法:

不兼容的指针类型发送 nsmutableurlrequest 到参数 类型嵌套 * _nonull nsurl urlwithstring

我看到这条线 [NSURL URLWithString:myRequest] 想要一个 NSString,但是我如何仍然传递我的 NSMutableURLRequest 上的其他信息?

NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL: myURL];
[acquisitionRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"];

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:[NSURL URLWithString:myRequest]
            completionHandler:^(NSData *data,
                                NSURLResponse *response,
                                NSError *error) {                
            }] resume];

【问题讨论】:

    标签: ios objective-c nsurlconnection nsurlsession


    【解决方案1】:

    您应该使用dataTaskWithRequest:completionHandler: 而不是dataTaskWithURL:completionHandler:。这样你就可以传递整个请求。如果它抱怨是可变的,你可以复制它以摆脱可变状态。

    NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL: myURL]; 
    [acquisitionRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"];
    
    NSURLSession *session = [NSURLSession sharedSession];
    
    [[session dataTaskWithRequest:[myRequest copy]
                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                    // completion stuff
    }] resume];
    

    【讨论】:

    • 非常感谢基思。没有副本似乎是一个快乐的露营者,但我会测试并在测试后批准它。再次感谢。
    【解决方案2】:

    您的问题是您在使用 URLWithString: 创建 URL 时传递了 NSMutableURLRequest 对象,该 URL 期望您传递 NSString。通过myURL 而不是[NSURL URLWithString:myRequest],你应该会很好。

    不过,我也建议改用dataTaskWithRequest:completionHandler:

    【讨论】:

      【解决方案3】:

      我收到了类似的问题。我无法在 iOS 9 上登录,因为 NSData 已被弃用。我需要更新到 NSURLSession。我正在尝试使用下面的代码执行此操作,但是 - 似乎仍有两行从 NSData 绘制,其中我指向它们的指针是 NSURLSession。

      这是在加重系统。如何设置接收线路打开以与 NSURLSession 连接?

          NSURLSession *session=[NSURLSession sharedSession];
          NSLog(@"response%@",response);
          NSLog(@"Response code: %ld", (long)[response statusCode]);
      
          if ([response statusCode] >= 200 && [response statusCode] < 300)
          {
              NSString *responseData = [[NSString alloc]initWithData:session encoding:NSUTF8StringEncoding];
              NSLog(@"Response ==> %@", responseData);
      
              NSError *error = nil;
            /* NSDictionary *jsonData = [NSJSONSerialization
                                        JSONObjectWithData:urlData
                                        options:NSJSONReadingMutableContainers
                                        error:&error];*/
             // NSLog(@"dict%@",jsonData);
              self.topLevelArray3 = [NSJSONSerialization JSONObjectWithData:session options:NSJSONReadingMutableContainers error:&error];
              for (int i=0; i<[self.topLevelArray3 count]; i++) {
      

      【讨论】:

        猜你喜欢
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多