将数据写入具有持久存储的文件,swift

write data to file with persistent storage, swift

我使用核心数据存储用户信息,我尝试使用"writeToFile".

写入测量数据(来自内置加速度计)

核心数据运行良好,用户数据持久化存储;然而,"writeToFile"存储的那些测量数据文件在写入很长period/newer个文件后就会逐渐消失。

我应该使用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!)
...

您正在使用 NSTemporaryDirectory 来存储您的文件。该目录的全部意义在于这些文件是 临时文件 ,这意味着操作系统可以随意删除它们。你说他们在 "a long period" 之后消失了;这正是 NSTemporaryDirectory.

的预期行为

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