来自createFileAtPath的更详细错误?

fuz*_*oat 20 objective-c

无论如何从"createFileAtPath"获取更详细的错误数据我有点期待NSError?目前我正在使用BOOL返回值.

success = [fileMan createFileAtPath:fileOnDisk contents:dBuffer attributes:nil];
if(success == YES) NSLog(@"FileCreated");
else {
    NSLog(@"ERROR: Failed to create file");
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

加里

Jar*_*die 55

我同意......我希望有一个接受NSError的函数!

在这种情况下返回的错误通常是声明的POSIX错误之一errno.h(errno作为Cocoa或Foundation标头的一部分自动包含在内).

要查看错误,请使用strerror函数from errno.h并引用全局errno整数,该问题发生时由低级POSIX io函数设置:

if (![fm createFileAtPath:@"/etc/foobar.txt" contents:data attributes:nil]) 
{
    NSLog(@"Error was code: %d - message: %s", errno, strerror(errno));
}

// output will be: Error was code: 13 - message: Permission denied
Run Code Online (Sandbox Code Playgroud)

错误代码常量列表列在Cocoa错误处理编程指南中(除了errno.h头文件本身).


Ada*_*dam 9

你不应该使用那种方法; 他们忘了将它放在主文档(!)中,但如果您阅读Apple头文件,则会发现此评论:

/*这里提供了这些方法以实现兼容性.返回NSErrors的NSData上的相应方法应被视为从NSData创建文件或将文件内容检索为NSData的主要方法.*/

所以,相反,Apple希望你使用它(从测试开始,它看起来功能完全相同 - 除了它位于一个你从未想过要寻找它的奇怪类中(我想创建一个空文件). ..所以我必须...实例化一个nil NSData对象?什么?)它有一个NSError对象):

https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/instm/NSData/writeToFile:options:error :