使用持久存储,swift将数据写入文件

时间:2016-08-27 08:25:54

标签: swift core-data writetofile

我使用核心数据存储用户信息,我尝试使用“writeToFile”编写测量数据(来自内置加速度计)。

核心数据与持久存储用户数据的作用很好;但是,“writeToFile”存储的测量数据文件在写入较长时间/较新文件后会逐渐消失。

我应该使用SQLite或任何其他数据库存储测量数据文件吗?或者是否可以使用核心数据来存储文件(虽然似乎无法实现)?我想将用户数据和测量数据保存到持久存储中。谢谢你的建议!!

func writeToFile () {

    let firstName = String(trial!.project!)
    let secondName = String(trial!.record!)


    let exportFilePath = NSTemporaryDirectory() + "\(firstName)_\(secondName).csv"
    let exportFileURL = NSURL(fileURLWithPath: exportFilePath)!
    NSFileManager.defaultManager().createFileAtPath(exportFilePath, contents: NSData(), attributes: nil)

更新: 使用“NSFileManager.defaultManager()。URLForDirectory”解决了问题。最终代码如下所示:

我不确定您是否需要声明“createDirectoryAtURL”或者是否可以创建文件。

let documentsURL = NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: NSURL(), create: true, error: nil)

NSFileManager.defaultManager().createDirectoryAtURL(documentsURL!, withIntermediateDirectories: true, attributes: nil, error: nil)

let fileURL = documentsURL!.URLByAppendingPathComponent("\(firstName).csv")

NSFileManager.defaultManager().createFileAtPath(fileURL.path!, contents: NSData(), attributes: nil)

let fileHandle = NSFileHandle(forWritingToURL: fileURL, error: nil)
if let fileHandle = fileHandle {
...
fileHandle.writeData(csvData!)
...

1 个答案:

答案 0 :(得分:2)

您正在使用NSTemporaryDirectory存储文件。该目录的重点是文件临时,这意味着操作系统可以自由删除它们。你说他们在很长一段时间后消失了#34 ;;这与NSTemporaryDirectory的预期行为完全吻合。

如果您需要保留文件,则应使用urls(for:in:)上的NSFileManager方法获取文档目录的位置(.documentDirectory)。