2010-08-28 101 views
8

我想写一个nsdata到我的磁盘上的文件,我有下面的代码,它不工作,我做错了什么?将NSData写入文件?

Boolean result = [data writeToFile:@"/Users/aryaxt/Desktop/test2.avi" atomically:YES]; 

test2.avi不存在,我假设将writeToFile将创造对我来说

+3

在附注中,您应该在Objective-C中使用'BOOL',而不是'Boolean'。 – 2010-08-28 21:21:11

+4

尝试' - [NSData writeToFile:options:error'](http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/ doc/uid/20000172-BCIICCHI)并告诉我们报告了什么错误。 – 2010-08-28 21:24:19

+2

(并且请在调试器中验证数据不是零;也许图像也是零;-) – 2010-08-28 21:24:45

回答

31

尝试使用:

NSError *error = nil; 
[email protected]"/Users/aryaxt/Desktop/test2.avi"; 
[data writeToFile:path options:NSDataWritingAtomic error:&error]; 
NSLog(@"Write returned error: %@", [error localizedDescription]); 

这会告诉你为什么写失败。

+10

只有当方法返回“否”时才应检查“错误”。基础类可能会在错误参数中放置其他对象或伪错误,甚至垃圾。 (这并不是说他们*做*,但它是程序员合同的一部分,所以要小心。) – 2010-08-29 02:25:46

+0

我有一个侧面的问题,有点偏离文档的主题:讨论 此方法可能不适合当写入可公开访问的文件。要安全地将数据写入公共位置,请改为使用NSFileHandle。有关详细信息,请参阅在安全编码指南中确保文件操作。“ 那么我应该还是使用它? – ColdSteel 2015-06-28 13:16:23

+0

”公共可访问文件“是什么意思? – ColdSteel 2015-06-28 13:19:05