使用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