让 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;(注意:这假定errorPtrNSError **参数的名称方法声明)。这也意味着您需要自己创建error @JacquesBlom 这可能有助于NSError**:apeth.com/iosBook/… 这将有助于返回零的约定:apeth.com/iOSBook/…

以上是关于让 Objective-C 方法返回任何东西的主要内容,如果未能解决你的问题,请参考以下文章

如何链接两个 JavaScript 对象?

python 常用的一些东西——sysos 等

Objective-C NSError 和 Java 错误

Objective-C学习笔记-第一天

没有从 postgresql 函数返回任何东西?

OpenGL变换反馈没有返回任何东西