使Objective-C方法返回任何内容
我使用下面的方法从URL获取数据,但是如果使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
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