在尝试将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;
}
答案 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对象。