正确使用 NSError 和非 BOOL 返回函数

Posted

技术标签:

【中文标题】正确使用 NSError 和非 BOOL 返回函数【英文标题】:Using NSError the right way with non BOOL returning functions 【发布时间】:2012-11-14 09:46:35 【问题描述】:

查看Error Handling Programming Guide,我了解到在以下情况下,我绝不能评估 NSError 参数 theError,除非返回值为 NO

BOOL success = [myDoc writeToURL:[self docURL] ofType:@"html" error:&theError];

当返回值不是成功的 BOOL 而是一个集合对象时会发生什么情况?

以 [NSIncrementalStore gainPermanentIDsForObjects:error] 为例。我不能使用 error 参数评估错误。我应该寻找什么?我想我可以收到一个 nil 指针或一个空数组。在这种情况下,空数组似乎不是一个好的响应,尽管在其他函数中空数组可能是一个好的响应。我可以read 表示,如果发生错误,error 对象将包含对所发生情况的描述,但我不太清楚如何才能发现错误确实发生了。

在此类情况下指示错误的正常 Cocoa 或 Foundation 方式是什么?

【问题讨论】:

【参考方案1】:

对于该方法,您应该返回一个包含与传入的对象一样多的项目的数组。我想说,如果您不这样做(数组为 nil 或为空),您重新处于错误状态,因为您违反了文档所说的将发生的情况:

包含数组中对象的对象 ID 的数组。

返回的数组必须按照对象在数组中出现的顺序返回对象ID

【讨论】:

谢谢!这就是我在这种情况下实际上正在做的事情。当我写下我的问题时,我变得更加笼统,而且我的目光超越了那个案例。我想知道是否存在全球政策之类的东西。我只是好奇可可通常会做什么。空数组或零数组指针?文档给出了一个关于什么可能是错误的提示,但对于像我这样不喜欢在不知情的情况下编写一行额外代码的人来说并不是那么精确(当只有一个错误情况可能发生时寻找两个错误条件):- P 我认为没有实际的政策。当然,您可以通过 if (array.count==0) 一次检查 nil 和空,因为消息传递 nil 将返回 nil。 有一个全局策略,nil 在方法返回对象时指示和错误。在一般情况下检查数组的计数是不可取的,因为在许多方法中空数组表示成功。我相信所有这些方法都已明确记录在案。

以上是关于正确使用 NSError 和非 BOOL 返回函数的主要内容,如果未能解决你的问题,请参考以下文章

出现错误 - (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL 错误:(NSError **)error

使用 ARC 处理 NSError - 泄漏

将 NSError 作为返回参数传回的问题

函数返回不正确的值[重复]

在当前线程 (signUp:) 上执行 Parse.com 用户注册并检索 NSError

Objective-C NSError 和 Java 错误