获取 &error 没有错误

Posted

技术标签:

【中文标题】获取 &error 没有错误【英文标题】:Getting &error Without Error 【发布时间】:2011-12-08 21:56:08 【问题描述】:

由于某种原因,当我执行 NSURLConnection 时不存在错误时,我收到了错误。

NSLog(@"Sending string to server. ID:11118");
    NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSLog(@"Response from server received. ID:11119");
    NSString *responseString = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];

if (&error)
    
        //Handle Error
        NSLog(@"Error getting a server response! (scm) Error %i: %@", [error code], [error localizedDescription]);
        UIAlertView *theAlert = [[UIAlertView alloc]initWithTitle:@"Error getting a server response!" message:[NSString stringWithFormat:@"Error %i: %@", [error code], [error localizedDescription]] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [theAlert show];
    

它显示警报,[error code] 显示 0[error localizedDescription] 显示 Null

有什么想法吗?

【问题讨论】:

【参考方案1】:

不要检查NSError 对象以确定是否发生错误。按照惯例,您应该检查产生错误的方法的返回值。如果结果是nilNO,那么您才应该继续检查错误。此外,您不是在检查错误对象,而是在检查错误对象内存中地址的有效性。

在您的情况下,仅当 urlDatanil 时才继续检查错误。

【讨论】:

他不会寻找urlDatanil,而不是responseString【参考方案2】:

问题是您正在检查错误对象的地址。您需要检查对象本身。

if (error != nil)

而不是

if (&error)

后一种形式评估错误对象的地址,该地址将非零,因此您的错误条件将始终运行。

(并且不要忘记事先将错误值设置为 nil)。

【讨论】:

另外,您应该从不检查通过输出参数返回的错误除非正常结果是nil/NO/等。除了这种情况,它的值在 Cocoa 中被认为是未定义的。 这非常有效。哎呀!谢谢你。 (等到时间过去接受) 不敢相信这是投票率最高的答案。当你需要他的时候,@bbum 在哪里...... @bbum 可能正在工作,就像我们所有人都应该做的那样 ;) 虽然 stevex 是第一个正确答案,但您的附加答案包含有用的细节,所以再给您 +1。【参考方案3】:

先将error初始化为nil:

NSError * error = nil;

当您想查看错误时,请执行以下操作:

if(error)

    //Handle Error

【讨论】:

这是不正确的。如果调用成功,Cocoa 不保证error 将是nil;您必须检查直接返回值以确定是否有错误。

以上是关于获取 &error 没有错误的主要内容,如果未能解决你的问题,请参考以下文章

以简单的形式获取 error_notification 文本而不生成验证错误

错误:无法获取此 StaticQuery 的结果

如何获取php错误

导入SVN,获取文件存在或文件未找到错误

为啥我需要的数据存在时 [context executeFetchRequest: request error: &error] 有时无法获取数据?

如何快速从错误中获取键值