2

我需要另一双眼睛来了解为什么在尝试将 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;
}
4

5 回答 5

1

来自 Apple 的错误处理编程指南

重要提示:成功或失败由方法的返回值指示。虽然间接返回 Cocoa 错误域中的错误对象的 Cocoa 方法如果通过直接返回 nil 或 NO 指示失败,则保证返回此类对象,但在尝试对NSError 对象。

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

于 2011-10-24T23:33:15.437 回答
0

您是否忘记了 NSError:

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

或者在哪里/何时error声明/定义以及将一个错误对象分配给另一个错误对象的意义何在?为什么不只是:

if (requestError != nil) {
    NSLog(@"%@", [requestError localizedDescription]);
    return;
}
于 2011-10-24T23:30:34.080 回答
0

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

于 2011-10-24T23:30:46.777 回答
0

假设您有一个接受NSError**.

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

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

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

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是因为您正在检查内存位置而不是可可对象。

于 2015-02-20T05:59:58.737 回答
0

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

于 2011-10-24T23:34:28.930 回答