使用ARC的NSURLConnection sendSynchronousRequest

我开始玩ARC,我尝试的第一个经验之一是对URL进行HTTP调用并获取一些数据。 当然,HTTP状态代码对我来说很重要,所以这意味着我使用sendSynchronousRequest “goto”类似于:

NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *responseCode = nil;

NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:responseCode error:error];

启用ARC后,我会在最后一行收到编译器错误和警告。

错误

Objective-C指针隐式转换为'NSURLResponse * __ autoreleasing *'不允许ARC

ARC不允许将Objective-C指针隐式转换为“NSError * __ autoreleasing *”

file://localhost/Users/jason/Projects/test/Data/DataService.m:错误:自动引用计数问题:ARC不允许将Objective-C指针隐式转换为'NSURLResponse * __ autoreleasing *'

file://localhost/Users/jason/Projects/test/Data/DataService.m:错误:自动引用计数问题:使用ARC不允许将Objective-C指针隐式转换为“NSError * __ autoreleasing *”

警告

将'NSHTTPURLResponse * _strong'发送到类型为'NSURLResponse * _autoreleasing *'的参数的不兼容指针类型

将'NSError * _strong'发送给类型为'NSError * _autoreleasing *'的参数的不兼容指针类型

从我可以告诉参考通过什么是搞砸了,但我不确定什么是解决这个问题的正确方法。 是否有一种“更好”的方式来完成与ARC的类似任务?


  NSError *error = nil;
  NSHTTPURLResponse *responseCode = nil;

  NSURLRequest *request;

  NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];

您错过了对错误/ responceCode指针的引用!


你必须使用(NSHTTPURLResponse __autoreleasing *)类型和(NSError __autoreleasing *)类型。

NSHTTPURLResponse __autoreleasing *response = nil;
NSError __autoreleasing *error = nil;

// request
NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

你可以在下面处理它们:

if (response){
    // code to handle with the response
}
if (error){
    // code to handle with the error
}

否则,您不能将响应和错误用作全局变量。 如果这样做,他们将无法正常工作。如下所示:

.h
NSHTTPURLResponse *__autoreleasing *response;
NSError *__autoreleasing *error;

.m
// request
NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:response error:error];

上面的代码不起作用!

链接地址: http://www.djcxy.com/p/44909.html

上一篇: NSURLConnection sendSynchronousRequest with ARC

下一篇: How do I return a struct value from a runtime