Working code: Save data by NSKeyedArchiver and Read data from NSKeyedUnarchiver
import SwiftUI
struct SwiftUIView: View {
let filename = "tmp.txt"
@State var savedContent: String = ""
@State var readContent: String = ""
var body: some View {
VStack {
HStack {
TextField("Type something to save", text: $savedContent)
Spacer()
Text("Save")
.onTapGesture {
save()
}
}
.padding()
.background(Color.green)
HStack {
Text(readContent)
Spacer()
Text("Read")
.onTapGesture {
read()
}
}
.padding()
.background(Color.yellow)
}
}
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
func read() {
let fullPath = getDocumentsDirectory().appendingPathComponent(filename)
do {
let data = try Data(contentsOf: fullPath)
do {
readContent = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! String
} catch {
print("Couldn't read file.")
}
} catch {
print("couldn't read the data")
}
}
func save() {
let fullPath = getDocumentsDirectory().appendingPathComponent(filename)
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: savedContent, requiringSecureCoding: false)
try data.write(to: fullPath)
} catch {
print("Couldn't write file")
}
}
}