Objective c 是否将NSData写入文件?

Objective c 是否将NSData写入文件?,objective-c,cocoa,nsdata,Objective C,Cocoa,Nsdata,我正在尝试将nsdata写入磁盘上的文件,我有以下代码,但它不起作用,我是否做错了什么 Boolean result = [data writeToFile:@"/Users/aryaxt/Desktop/test2.avi" atomically:YES]; test2.avi不存在,我假设writeToFile会为我创建它尝试使用: NSError *error = nil; path=@"/Users/aryaxt/Desktop/test2.avi"; [data writeToFil

我正在尝试将nsdata写入磁盘上的文件,我有以下代码,但它不起作用,我是否做错了什么

Boolean result = [data writeToFile:@"/Users/aryaxt/Desktop/test2.avi" atomically:YES];
test2.avi不存在,我假设writeToFile会为我创建它

尝试使用:

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

这将告诉您写入失败的原因。

另一方面,您应该在Objective-C中使用
BOOL
,而不是
Boolean
。请尝试
-[NSData writeToFile:options:error
](),并告诉我们报告了什么错误。(请在调试器中验证数据不是零;可能图像也是零;-)我在多线程应用程序中也遇到过同样的问题。使用assert([data length]>0)作为防御编程风格。只有当方法返回
NO
时,才应检查
error
。基础类可以在错误参数中放置其他对象或假错误甚至垃圾。(这并不是说他们会这样做,但这是程序员合同的一部分,他们可以这样做,所以要小心。)我有一个与文档主题有点离题的附带问题:讨论在编写可公开访问的文件时,这种方法可能不合适。要将数据安全地写入公共位置,请改用NSFileHandle。有关更多信息,请参见《安全编码指南》中的安全文件操作。“那么我是否仍应使用它?”可公开访问的文件“这意味着什么?许多人对乔纳森的评论投了赞成票,他说如果方法返回
NO
,则只检查
错误。我同意,这对于发布的生产代码是正确的,并且在向用户发送错误时更是如此。这里省略检查部分是为了简洁,部分是因为本例中的
NSLog()
调用用于开发过程中的调试。此代码非常旧,没有考虑沙箱。此外,请查看苹果《安全编码指南》中的警告