NSFileManager -createFileAtPath因NSInvalidArgumentException而失败

时间:2014-09-23 17:28:19

标签: ios ios8 nsfilemanager

也许我刚刚错过了文档中的内容,但我无法找到任何说明iOS 8中此行为应该更改的内容。

我的应用将当前工作目录设置为Documents目录,然后尝试使用NSFileManager -createFileAtPath在那里创建文件。在iOS 8之前,这可以正常工作。在运行iOS 8的设备上,我在调用-createFileAtPath:

时收到以下信息
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
 reason: '*** -[NSFileManager fileSystemRepresentationWithPath:]: nil or empty path argument'


这是一个可以重现问题的最小代码片段:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [paths objectAtIndex:0];
[[NSFileManager defaultManager] changeCurrentDirectoryPath:docsDir];
[[NSFileManager defaultManager] createFileAtPath:@"temp.dat" contents:nil attributes:nil];

请注意createFileAtPath上的路径参数为"temp.dat" - 如果我将其更改为"./temp.dat",则呼叫成功。 < / p>

我做了一些愚蠢的事情,这只是&#34;意外&#34;在以前的iOS版本中工作?或者他们是否有意改变了这里的行为?或者这是iOS 8中的错误?采用path参数的其他NSFileManager方法似乎没有文件名(例如-removeItemAtPath:@"temp.dat" error:&err成功)。

已编辑添加:

这仅发生在物理设备上。在模拟器中,上面对createFileAtPath的调用成功。

1 个答案:

答案 0 :(得分:5)

我向Apple公开了一个错误,他们将其作为副本关闭。虽然这并不一定证实他们认为这是一个错误,但它至少证实我不是第一个遇到这个错误的人,并且这个行为确实在iOS 8中发生了变化。

目前,解决方案是在文件名前添加./,或提供绝对路径。