如何在几种方法中冒泡错误对象?

时间:2010-12-18 18:46:34

标签: objective-c cocoa pointers nserror

这不仅仅是一个C问题,而是在这里。

我有一个方法,它接收一个指向NSError对象的指针的地址作为参数。现在,该方法深埋在类层次结构中的几个层次,我需要将错误对象冒泡到顶部。

我可以在每个方法上返回错误对象,但我宁愿用Cocoa方式做,并在将错误对象作为参数传递时返回一个布尔值。

我该怎么做?

1 个答案:

答案 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!
    }
}

您可以结合使用这两种方法,在自己的局部变量中捕获错误对象,以便在错误返回指针中存储自定义/包装错误之前在故障情况下自定义或包装它,以便调用者接收。