Wednesday, October 4, 2017

Swift ghi dữ liệu

Ta cần lưu dữ liệu vào trong điện thoại người dùng, một chuỗi ký tự chẳng hạn, ta dùng các dòng lệnh sau. Copy vào dưới viewDidLoad
let file = "ghi.txt"
let text = "Đây là dòng chữ ghi vào"
if let dir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
                    let path = NSURL(fileURLWithPath: dir).URLByAppendingPathComponent(file)       
                    do {
                        try text.writeToURL(path, atomically: false, encoding: NSUTF8StringEncoding)
                    }
                    catch {/* error handling here */}
                }
Để kiểm tra xem dữ liệu đã được ghi chưa, ta sẽ đọc file đó ra và set vào textview.
let documentsPath2 = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
        let path2 = documentsPath2.stringByAppendingPathComponent("ghi.txt")
        var read : String = ""
     do {
            try read = NSString(contentsOfFile: path2, encoding: NSUTF8StringEncoding) as String
            gi.text = read
            gi.font = UIFont.italicSystemFontOfSize(17)
            gi.textColor = UIColor.blueColor()
            gi.textAlignment = NSTextAlignment.Center
             }
        catch let error as NSError {
            // print("ERROR : reading from file \(fileName) : \(error.localizedDescription)")
        }

Ta thấy dữ liệu đã ghi và đọc thành công.
Thực tế ta hay dùng ghi vào theo dòng, tức dữ liệu ghi sau sẽ ở dòng dưới dữ liệu ghi trước. Việc này sẽ dễ cho khi đọc ra thành mảng lấy từng dòng để sử dụng.
Hàm sau ghi dữ liệu vào theo dòng.
func write(content: String, _ fileName: String) {
     let contentToAppend = content+"\n"
     let filePath = NSHomeDirectory() + "/Documents/" + fileName
   if let fileHandle = NSFileHandle(forWritingAtPath: filePath) {
 fileHandle.seekToEndOfFile()
fileHandle.writeData(contentToAppend.dataUsingEncoding(NSUTF8StringEncoding)!)
   }
        else {    
            do {
                try contentToAppend.writeToFile(filePath, atomically: true, encoding: NSUTF8StringEncoding)
            } catch {
                print("Error creating \(filePath)")
            }
        }

    }

No comments:

Post a Comment