2016-08-27 81 views
1

我使用核心數據存儲用戶信息,並試圖使用「writeToFile」寫入測量數據(來自內置加速度計)。核心數據運行良好,持久存儲用戶數據;然而,由「writeToFile」存儲的測量數據文件在長時間/較新的文件寫入後會逐漸消失。將數據寫入帶有持久存儲的文件,swift

我應該使用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!) 
... 
+0

我還在自己學習這些東西,但它是否與存儲文件的位置有關? (這是一個臨時位置?)。再一次,我對這些類不熟悉,但它被命名爲'NSTemporaryDirectory()',這看起來似乎是暫時性的。 – Fluidity

+0

請顯示您的平臺。 iOS版?沙盒Mac(App Store應用程序)?或免費的Mac應用程序? – OOPer

+0

嗨!這是iOS 8 – Mushroomcloud

回答

2

您正在使用NSTemporaryDirectory來存儲您的文件。該目錄的全部內容是文件是臨時,這意味着操作系統可以自由刪除它們。你說他們在「長期」之後消失了;這正是NSTemporaryDirectory的預期行爲。

如果您需要保留文件,您應該使用urls(for:in:)方法NSFileManager來獲取文檔目錄的位置(.documentDirectory)。

+0

「無法找到該頁面」。如果您要求提供文檔目錄,則它會一直持續到用戶刪除您的應用或手機被刪除。文檔目錄中的任何文件都會自動備份。 –

+0

嗨,謝謝指出!我需要一點時間來了解如何在urls()方法上實現您的建議。稍後會回來選擇你的答案,如果它運作良好! – Mushroomcloud

+0

再次感謝您的快速響應!這是午夜在這裏,所以我會明天嘗試;) – Mushroomcloud

相關問題