【问题标题】:Getting &error Without Error获取 &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

有什么想法吗?

【问题讨论】:

    标签: objective-c ios nsurlconnection nserror


    【解决方案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;您必须检查直接返回值以确定是否有错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2012-12-31
    • 2014-07-25
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多