【问题标题】:fails, but no error object is returned. Why?失败,但不返回错误对象。为什么?
【发布时间】:2009-08-11 20:46:39
【问题描述】:

我试图理解[NSData writeToFile:options:error:] 返回的值的含义。该方法返回一个 BOOL,根据 Apple 的文档,它是“如果操作成功则为 YES,否则为 NO。”

很公平,但如果不是,我会假设错误参数将设置为某个可检索的 NSError* 值。然而,在我遇到的结果中,情况并非如此。因此,我有些困惑,不知道如何确定导致失败的原因。

也就是说,我有这个代码(或多或少):

NSError* error = nil;
BOOL success = [data writeToFile: filePath error: &error];
if ( error )
    NSLog( @"error = %@", [error description] );

success 在我运行的代码中变成了NO,但NSLog 语句从未执行。怎么会?

霍华德

【问题讨论】:

    标签: objective-c error-handling nsdata


    【解决方案1】:

    data 可能是nil,在这种情况下[data writeToFile:error:] 返回nil,但*error 未设置。

    【讨论】:

    • 就是这样。谢谢你。我以前从未被您可以向 nil 对象发送消息的事实所困扰;最后:我现在认为自己是一个真正的 Objective-C 程序员! :-)
    • 发给 nil 对象的消息几乎总是让我浪费几个小时 :)
    【解决方案2】:

    writeToFile 方法在成功时返回 TRUE,在失败时返回 FALSE - 这就是您要实际检查的内容。

    所以,试试吧:

    if(!success)
    

    作为你的条件而不是 if(error)。

    【讨论】:

    • 我已经尝试过成功 == NO,但在那种情况下(我假设在尝试您的较短形式的情况下也是如此),发出的日志语句是'error = (null)'。这就是我不明白的。
    • IMO 为一个体面的错误处理,你应该检查成功和错误,如果数据为 nil,你不会成功但不会有错误,在这种情况下你应该告诉用户一些事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2017-04-26
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2013-09-13
    • 2018-08-12
    相关资源
    最近更新 更多