带有全局处理程序的iOS NSError

时间:2014-08-21 08:10:30

标签: ios objective-c error-handling

我正在编写iOS应用程序的开始。阅读了关于如何处理错误的Apple指南,我得到了以下最重要的观点:

  • 程序员的例外情况
  • 对用户
  • 使用NSError

现在,NSError通常作为out-argument传递,然后可以在内部使用,并且必须由调用者进行检查。但是,我问自己,使用全局错误处理程序是否是一个好主意,比如说包裹NSError的单例,可以用来触发被调用函数中的错误和错误处理。 / p>

是否有任何反对该方法的内容,或者这是一种不好的做法?

4 个答案:

答案 0 :(得分:1)

MacOS X具有error responder chain的概念,ErrorKit是一种非正式协议,可以在响应者链中传播错误,直到处理完毕。无论出于何种原因,这在iOS上的Cocoa中没有实现,但存在多个第三方实现:

ios-presentError

{{3}}

还有其他几个。

这种方法非常灵活,文档齐全,是MacOS X上的最佳实践,并且通常优于使用单例来实现此目的。

答案 1 :(得分:0)

这将是一件非常糟糕的事情,因为你的观点" NSError适用于用户"根本不正确。 NSErrors会告知您的软件无法执行操作的原因。这是否是用户需要被告知的错误完全取决于具体情况。

答案 2 :(得分:0)

在实践中,大多数错误需要在非常狭窄的环境中处理,并且您不会通过尝试在NSError类中包装某些东西来获得任何东西。只需处理错误,然后继续执行。

答案 3 :(得分:0)

iOS中的大多数例外情况基本上是致命的"并且无法有效处理(因此在iOS应用程序中使用异常处理程序是不常见的)。

按照惯例,使用返回码或通过从被调用函数返回nil或0来报告非致命错误。在许多这种情况下,当收到错误的返回码时,可以使用error:参数(应记录/转储生成的NSError值)。

(请注意,error: parm结果不是您检查是否发生错误的结果。而是其他地方的错误返回代码表示应记录/转储error: parm结果。)

极少数情况下,向用户报告NSError内容是有意义的 - 大多数情况下,这些信息仅对程序员有意义。