Working code: Save data by NSKeyedArchiver and Read data from NSKeyedUnarchiver
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 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" ) } } } |