0

I am attempting to store multiple lines of text in a local text file on an iphone. I have code which will create a text document, write data to that document and read data from this document.

However, if i try and add more text to this document, it will only store the most recent line of text which has been added.

The code I have for creating, writing and reading text from this document is as follows:

//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)

I need this to allow for multiple entries of text to be stored, rather than just the most recent data which was written.

I suspect that due to the code being inside the 'viewDidLoadi()' method that it is constantly recreating the same document and thus always making a new version which overwrites the old Rewards.txt document.

Any help is greatly appreciated, thanks.

adjash
  • 173
  • 1
  • 1
  • 10

1 Answers1

0

Since you are using write, it will overwrite whatever is written earlier.

try writeString?.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8)

You need to append line of text to your file, which will not overwrite previous written lines. Something like this:

writeString.data(using: String.Encoding.utf8)?.write(to: fileURL, options: Data.WritingOptions.withoutOverwriting)
Rikesh Subedi
  • 1,755
  • 22
  • 21
  • Your solution seems like the simplest, although I'm having some issues actually implementing the code: `try writeString?.data(using: String.Encoding.utf8)?.write(to: fileURL, options: Data.writingOptions.withoutOverwriting) ` I receieve the following error http://pastebin.com/raw/wradZ2hQ – adjash Aug 08 '18 at 10:59