这不仅仅是一个C问题,而是在这里。
我有一个方法,它接收一个指向NSError对象的指针的地址作为参数。现在,该方法深埋在类层次结构中的几个层次,我需要将错误对象冒泡到顶部。
我可以在每个方法上返回错误对象,但我宁愿用Cocoa方式做,并在将错误对象作为参数传递时返回一个布尔值。
我该怎么做?
答案 0 :(得分:1)
我可以在每个方法上返回错误对象,但我宁愿用Cocoa方式做,并在将错误对象作为参数传递时返回一个布尔值。
Cocoa方式是布尔直接返回,带有引用(即通过指针)返回错误值,如下所示:
NSError *error = nil;
if ([foo trySomething:bar error:&error]) {
//Success!
} else {
//Failure!
}
(或者,trySomething:error:
可以返回一个对象,在这种情况下,您将该对象视为布尔返回:非 - nil
为真/成功,nil
为假/失败。 )
为了使这个可链接,每个方法(除了最外层)都应该有一个错误指针参数,并在其实现中使用它:
- (void) trySomething:(MyBar *)bar error:(out NSError **)outError
if ([bartender restock:bar error:outError]) {
//Success!
} else {
//Failure!
}
}
您可以结合使用这两种方法,在自己的局部变量中捕获错误对象,以便在错误返回指针中存储自定义/包装错误之前在故障情况下自定义或包装它,以便调用者接收。