将NSData写入文件的最简单方法


67

现在我的问题是如何data以最简单的方式将此文件写入文件。

(我已经有一个NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes

Answers:


100

NSData有一个称为的方法writeToURL:atomically:可以完全满足您的要求。在文档中NSData查找有关如何使用它的信息。


1
NSData对象的来源是否与此方法有关? 在此问题中,我将保存NSData从URL下载到对象中的.sqlite数据库,但似乎未正确保存它。该文件已写入,但是当我尝试访问它(通过我的应用程序或使用第三方查看器)时,它告诉我它不是有效的SQLite数据库。难道writeToURL:atomically:只为减排工作NSString秒或类似的东西?
GeneralMike

1
NSData是任何类型的二进制数据的包装。原始来源无所谓。考虑到您的问题,建议您使用over NSURLConnection(或类似的库AFNetworkinginitWithContentsOfURL:。对于较小的下载,NSData可能会很好,但是它不提供对下载的任何控制。当出现问题时,这将很难诊断问题。
亚历克斯

37

请注意,写入NSData文件是一个IO操作,可能会阻塞主线程。特别是在数据对象较大的情况下。

因此,建议在后台线程上执行此操作,最简单的方法是如下使用GCD:


1
如何找回呢?


30

如果您使用文件名而不是URL,则writeToURL:atomically:writeToFile:atomically:。


2
为NSURL +1。当您指向文件时,NSURL pwns NSString。Apple始终建议将NSURL而不是NSString用于文件路径。:)

9
我认为writeToURL和writeToFile没有区别。根据文档:“由于目前仅支持file:// URL,因此此方法与writeToFile:atomically:之间没有区别,只是第一个参数的类型不同”
Ronnie Liew

NSData对象的来源是否与此方法有关? 在此问题中,我将保存NSData从URL下载到对象中的.sqlite数据库,但似乎未正确保存它。该文件已写入,但是当我尝试访问它(通过我的应用程序或使用第三方查看器)时,它告诉我它不是有效的SQLite数据库。难道writeToURL:atomically:只为减排工作NSString秒或类似的东西?
GeneralMike

3

您也可以writeToFile:options:error:writeToURL:options:error:可以报​​告错误代码,以防NSData因任何原因保存失败。例如:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.