获取 &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
对象以确定是否发生错误。按照惯例,您应该检查产生错误的方法的返回值。如果结果是nil
或NO
,那么您才应该继续检查错误。此外,您不是在检查错误对象,而是在检查错误对象内存中地址的有效性。
在您的情况下,仅当 urlData
为 nil
时才继续检查错误。
【讨论】:
他不会寻找urlData
是nil
,而不是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 文本而不生成验证错误
为啥我需要的数据存在时 [context executeFetchRequest: request error: &error] 有时无法获取数据?