Я пытаюсь создать простое приложение для ввода текста в Swift, которое является моим самым первым приложением, созданным на этом конкретном языке. Я могу создать файл и сохранить в нем текст. Квест, на котором я сейчас нахожусь, чтобы найти ответ, следующий:
Как сохранить несколько записей из моего NSTextField в одном файле с отметкой времени записи? Потому что каждый раз, когда я нажимаю «Сохранить», файл перезаписывается новой записью.
Вот мой код:
@IBAction func saveTaskButtonClicked(_ sender: NSButton) {
//save task function
do {
// get the documents folder url
if let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
// create the destination url for the text file to be saved
let fileURL = documentDirectory.appendingPathComponent("msrfile.txt")
// define the string/text to be saved
let text = taskEntry.stringValue
// writing to disk
// Note: if you set atomically to true it will overwrite the file if it exists without a warning
try text.write(to: fileURL, atomically: false, encoding: .utf8)
print("saving was successful")
// any posterior code goes here
// reading from disk
let savedText = try String(contentsOf: fileURL)
print("savedText:", savedText) // "Hello World !!!\n"
}
} catch {
print("error:", error)
}
}
Редактировать (найденное решение):
Вот мой обновленный код
@IBAction func saveTaskButtonClicked(_ sender: NSButton) {
//save task function
do {
// get the documents folder url
if let documentDirectory = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first {
// create the destination url for the text file to be saved
let fileURL = documentDirectory.appendingPathComponent("msrfile.txt")
// define the string/text to be saved
let text = taskEntry.stringValue + " " + dateOfTaskEntry.stringValue + "\n"
let encoding = String.Encoding.utf8
guard let data = text.data(using: encoding) else {
throw FileWriteError.convertToDataIssue
}
if let fileHandle = FileHandle(forWritingAtPath: fileURL.path) {
fileHandle.seekToEndOfFile()
fileHandle.write(data)
} else {
try text.write(to: fileURL, atomically: false, encoding: encoding)
}
print("saving was successful")
// any posterior code goes here
// reading from disk
let savedText = try String(contentsOf: fileURL)
print("savedText:", savedText) // "Hello World !!!\n"
}
} catch {
print("error:", error)
}
}