我有一个方法(NSError **),但我不想传递它。当我传递“nil”或“NULL”时,我最终得到“EXC_BAD_ACCESS”。
违规行是“* error = nil;”
如何在不崩溃的情况下传递相当于“nil”的内容?
答案 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];