如何传递等效的nil(NSError **)

时间:2010-03-23 18:15:57

标签: iphone objective-c

我有一个方法(NSError **),但我不想传递它。当我传递“nil”或“NULL”时,我最终得到“EXC_BAD_ACCESS”。

违规行是“* error = nil;”

如何在不崩溃的情况下传递相当于“nil”的内容?

3 个答案:

答案 0 :(得分:3)

违规行应为:

if (error != nil) { *error = nil; }

您正试图取消引用空指针,这是一种可靠的崩溃方式。

替代方法是将NSError**传递给它,但之后只需忽略它。

答案 1 :(得分:3)

当您实施此类方法时,您可以使用以下技巧,这样您就不必一直检查nil

- (void) doSomethingMaybeCausing: (NSError**) error
{
    NSError *dummyError = nil;
    if (error == NULL)
        error = &dummyError;
    // ...later:
    *error = [NSError …];
}

如果他对错误不感兴趣,调用者可以通过NULL

答案 2 :(得分:1)

你必须向它传递一个有效指针,指向它可以修改的东西。执行此操作的标准方法是:

NSError *error = nil;
[object callMethod:whatever error:&error];