代码之家  ›  专栏  ›  技术社区  ›  adjash

用swift保存多行文本

  •  0
  • adjash  · 技术社区  · 7 年前

    我试图在iphone的本地文本文件中存储多行文本。我有代码可以创建一个文本文档,将数据写入该文档,并从该文档读取数据。

    但是,如果我尝试向此文档中添加更多文本,它将只存储最近添加的文本行。

    我在本文档中创建、编写和阅读文本的代码如下:

    //Storing user rewards
        let fileName = "Rewards"
        let DocumentDirURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
        let fileURL = DocumentDirURL.appendingPathComponent(fileName).appendingPathExtension("txt")
    
       //print("File Path: \(fileURL.path)")
    
        let writeString = rewardLBL.text
       do {
            //writing to the file
            try writeString?.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8)
        } catch let error as NSError{
            print("failed to write")
            print(error)
        }
    
        var readString = ""
        do {
            readString = try String(contentsOf: fileURL)
        }catch let error as NSError{
            print("failed to readFile")
            print(error)
        }
    
        print(readString)
    

    我需要这样做,以允许存储多个文本条目,而不仅仅是最近写入的数据。

    我怀疑,由于代码位于“viewDidLoadi()”方法中,它会不断地重新创建同一个文档,从而总是创建一个覆盖了旧Rewards.txt文档的新版本。

    非常感谢您的帮助,谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rikesh Subedi    7 年前

    因为您使用的是write,所以它将覆盖先前编写的内容。

    试试writeString?。写入(到:fileURL,原子:true,编码: 字符串。编码。utf8)

    您需要在文件中追加一行文本,这将不会覆盖以前写入的行。像这样的:

    writeString.data(using: String.Encoding.utf8)?.write(to: fileURL, options: Data.WritingOptions.withoutOverwriting)