使Objective-C方法返回任何内容

使Objective-C方法返回任何内容,objective-c,nsdata,nserror,Objective C,Nsdata,Nserror,我使用下面的方法从URL获取数据,但是如果statusCode不等于200,我想让它返回一个错误 + (NSData *)getData:(NSString *) url { NSURL *urlNS = [[NSURL alloc] initWithString:url]; NSURLRequest * urlRequest = [NSURLRequest requestWithURL:urlNS]; NSError * error = nil; NSHTTPU

我使用下面的方法从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吗?

通常的约定是,如果有错误,则返回nil

如果您还想提供一个错误,通常的做法是通过间接方式提供一个额外的参数(
NSError**

例如:

+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
返回值

通过使用编码enc从path命名的文件中读取数据而创建的字符串。如果文件无法打开或存在编码错误,则返回nil


Cocoa非常频繁地使用这种模式。

因此它将是
+(id)getData:(NSString*)url错误:(NSError**)错误
?当我说
时返回错误我得到一个错误:“ARC不允许对指向“…”的间接指针进行隐式转换。”如何解决这个问题?您不应该
返回错误,如果(errorPtr)*errorPtr=error,则需要设置错误
然后
返回nil
(注意:这假定
errorPtr
是方法声明中
NSError**
参数的名称)。这也意味着您需要自己创建
错误
。@JacquesBlom这可能有助于
NSError**
:这将有助于返回nil的约定:不要在方法前面加上
get
;这是为一种特殊情况保留的,而这种情况并非如此<代码>下载数据:错误:
似乎更合适。像往常一样目光敏锐,@bbum