NSError EXC_BAD_ACCESS

时间:2011-10-24 23:21:51

标签: objective-c exc-bad-access nserror

在尝试将NSError分配给传递给函数的NSError时,我需要第二副眼睛来解释为什么我收到错误:

// Response and Error Objs.
NSURLResponse *response = nil;
NSError *requestError = nil;

// Attempt authentication
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];

// Error?
if (requestError != nil) {
    *error = requestError; // Error happens here
    return;
}

5 个答案:

答案 0 :(得分:1)

来自Apple的Error Handling Programming Guide

  

重要提示:成功或失败由返回值表示   方法。虽然Cocoa方法间接返回错误对象   如果是,Cocoa错误域保证返回这样的对象   方法通过直接返回nil或NO来表示失败,你应该   在尝试之前,始终检查返回值是否为“否”   使用NSError对象执行任何操作。

在这种情况下,-sendSynchronousRequest:returnResponse:error:会返回NSData个对象。在继续执行错误之前,您应该检查是否为零。

答案 1 :(得分:0)

你忘记了NSError:

if (requestError != nil) {
    NSError *error = requestError; // Error happens here
    return;
}

或者{/ 1}}声明/定义的位置/时间是什么,并指出将一个错误对象分配给另一个?为什么不呢:

error

答案 2 :(得分:0)

很可能*error没有指向有效指针;样品不完整,所以我不能肯定地说。也许*error是零。

答案 3 :(得分:0)

您不能在您尝试使用的表单中使用“错误”。您可以在NSURLConnection中访问错误,但不能在其外部访问。 因此,您需要在使用之前定义错误对象。

答案 4 :(得分:0)

假设您有一个接受NSError**的方法签名。

这意味着该方法接受指向指向NSError值的指针的指针。

所以,我怀疑因为错误是NULL,你基本上要求NULL对象的值是它所指向的东西。但是,当然,你不能向NULL对象询问该信息,这就是它崩溃的原因。

因此,在您尝试设置*error的值之前,您需要检查error是否NULL不是这样的:

if (error == NULL) {
    // the function caller has supplied us with a nil as an argument
    // this indicates the caller does not care about the error
    return;
}

您必须检查NULL而不是nil的原因是因为您正在检查内存位置而不是cocoa对象。