Objective c 为什么fileManager copyItemAtPath:ToPath:error在成功复制文件时返回错误?

Objective c 为什么fileManager copyItemAtPath:ToPath:error在成功复制文件时返回错误?,objective-c,ios,Objective C,Ios,这纯粹是一个好奇的问题——解决方案是检查返回值而不是错误——但是这段代码已经有几个月的历史了,而且这个特定的部分在过去并不是一个问题(可能与这段代码只在应用程序的第一次运行时才运行这一事实有关?) 我有一段代码,其中我将文件从捆绑包复制到documents目录(一些html文档的JQuery副本)。复制成功,但实际上返回了一个错误(cocoa错误4,无法完成)。当函数实际上已成功完成时,为什么会向我提供错误 我很好奇,至少在某种程度上,因为我怀疑这表明我对如何处理错误文件存在一些重大误解。根据,

这纯粹是一个好奇的问题——解决方案是检查返回值而不是错误——但是这段代码已经有几个月的历史了,而且这个特定的部分在过去并不是一个问题(可能与这段代码只在应用程序的第一次运行时才运行这一事实有关?)

我有一段代码,其中我将文件从捆绑包复制到documents目录(一些html文档的JQuery副本)。复制成功,但实际上返回了一个错误(cocoa错误4,无法完成)。当函数实际上已成功完成时,为什么会向我提供错误


我很好奇,至少在某种程度上,因为我怀疑这表明我对如何处理错误文件存在一些重大误解。

根据,错误代码4似乎是
NSFileNoSuchFileError

我怀疑,由于复制之前文档目录中的文件不存在,因此设置了此错误。

读取for NSFileManager的命令时,会说不要使用singleton方法[NSFileManager defaultManager],因为NSFileManager不是线程安全的。希望这能消除您的好奇心。

我看过很多示例代码,它们检查错误:参数是否有nil引用以确定方法是否成功,这是错误的!苹果公司在报告中警告说,这不是记录在案的行为。必须首先检查方法的返回值,如果它返回错误指示,则可以检查NSError引用以了解有关错误的更多信息。

复制之前是否存在该文件?非常确定调用采用
NSError**
的方法的范例。在检查错误之前,必须检查返回值。@danielbeard捆绑包中的文件(显然是的),或者在目标文件夹中(没有,因此需要复制)?嗯,我没有看到,实际上,我看到了“共享NSFileManager对象的方法可以从多个线程安全地调用”,您看到的是文档的哪一部分?阅读“线程注意事项”部分还说使用[[NSFileManager alloc]init]创建实例;因为这将为您提供所有操作的状态。所以使用共享实例[NSFileManager defaultManager]不是最佳方法是的,但它是线程安全的,他们只是说尝试从单实例获取委托回调是不合适的。很好的发现。我自己也犯过这样的错误,我得把它删掉!有趣的。。。哦,天哪,我现在有很多代码要重构。