【发布时间】:2010-12-18 18:46:33
【问题描述】:
这更像是一个 C 问题,但在这里。
我有一个方法,它接收一个指向 NSError 对象的指针的地址作为参数。现在,该方法在类层次结构中深埋了好几层,我需要让错误对象一直冒泡到顶部。
我可以在每个方法上返回错误对象,但我宁愿使用 Cocoa 方式并在将错误对象作为参数传递时返回一个布尔值。
我该怎么做?
【问题讨论】:
标签: objective-c cocoa pointers nserror
这更像是一个 C 问题,但在这里。
我有一个方法,它接收一个指向 NSError 对象的指针的地址作为参数。现在,该方法在类层次结构中深埋了好几层,我需要让错误对象一直冒泡到顶部。
我可以在每个方法上返回错误对象,但我宁愿使用 Cocoa 方式并在将错误对象作为参数传递时返回一个布尔值。
我该怎么做?
【问题讨论】:
标签: objective-c cocoa pointers nserror
我可以在每个方法上返回错误对象,但我宁愿使用 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!
}
}
您可以结合这两种方法,在您自己的局部变量中捕获错误对象,以便在将自定义/包装器错误存储在错误返回指针中以供调用者接收之前自定义或将其包装在失败案例中。
【讨论】: