让 Objective-C 方法返回任何东西
Posted
技术标签:
【中文标题】让 Objective-C 方法返回任何东西【英文标题】:Make Objective-C method return anything 【发布时间】:2013-04-04 19:20:17 【问题描述】:我正在使用下面的这种方法从 URL 获取数据,但是如果 statusCode
不等于 200,我想让它返回错误。
+ (NSData *)getData:(NSString *) url
NSURL *urlNS = [[NSURL alloc] initWithString:url];
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:urlNS];
NSError * error = nil;
NSHTTPURLResponse* urlResponse = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&error];
int statusCode = [urlResponse statusCode];
if(statusCode == 200)
return data;
else
//return the error object which is not NSData or which is converted to NSData
我的问题
我可以在非 NSData 对象中以某种方式返回我的错误(它将是上面定义的错误变量),还是可以将我的错误转换为 NSData?
【问题讨论】:
不要在方法前加上get
;这是为特殊情况保留的,这不是。 downloadData:error:
似乎更合适。
像往常一样敏锐的眼睛,@bbum
【参考方案1】:
如果有错误,通常的约定是返回 nil。
如果你还想提供错误,通常的做法是通过间接方式提供额外的参数(NSError**
)。
例子:
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
返回值
通过使用编码enc从路径命名的文件中读取数据创建的字符串。如果文件无法打开或存在编码错误,则返回 nil。
Cocoa 大量使用了这种模式非常。
【讨论】:
所以会是...+ (id)getData:(NSString *) url error:(NSError **)error
?
当我说return error;
时,我得到一个错误:“间接指针的隐式转换”...“ARC 不允许。”我该如何解决?
你不应该return error;
,你需要设置错误if (errorPtr) *errorPtr = error;
然后return nil;
(注意:这假定errorPtr
是NSError **
参数的名称方法声明)。这也意味着您需要自己创建error
。
@JacquesBlom 这可能有助于NSError**
:apeth.com/iosBook/… 这将有助于返回零的约定:apeth.com/iOSBook/…以上是关于让 Objective-C 方法返回任何东西的主要内容,如果未能解决你的问题,请参考以下文章