前提・実現したいこと
ListのデータをUserdefaultsで保存しようと考えています。
以下のエラーを直す方法を教えていただきたいです。
発生している問題・エラーメッセージ
出ているエラーそのまま
"Attempt to insert non-property list object (\n\"pra3.Operate(id: 4C6DA55C-D1F2-4BE3-BE70-D88FB31243FA, task: \\"task\\", time: \\"60\\")\",\n \"pra3.Operate(id: 3C743C08-2EE5-4272-8A39-C42727FEA9A6, task: \\"1\\", time: \\"1\\")\"\n) for key operate2"
要約
Attempt to insert non-property list object (~~~) for key operate2"
該当のソースコード
SwiftUI
1 2import SwiftUI 3 4struct Operate: Identifiable{ 5 6 var id = UUID() 7 var task: String 8 var time: String 9 10 11} 12 13var ListWidth = UIScreen.main.bounds.width 14var ListHeight = UIScreen.main.bounds.height 15 16struct OperateList: View { 17 18 @State var pretask: String = "" 19 @State var pretime: String = "" 20 @State var operate: [Operate] = [Operate(task: "task", time: "60")] 21 22 var body: some View { 23 24 VStack{ 25 26 HStack{ 27 28 29 TextField("task", text: self.$pretask).textFieldStyle(RoundedBorderTextFieldStyle()).frame(width: ListWidth / 2, height: ListHeight / 20) 30 //taskの入力 31 32 TextField("time", text: self.$pretime).textFieldStyle(RoundedBorderTextFieldStyle()).frame(width: ListWidth / 5, height: ListHeight / 20).keyboardType(.numberPad) 33 //timeの入力 34 35 Button(action: { 36 self.operate.append(Operate(task: self.pretask, time: self.pretime)) 37 self.pretask = "" 38 self.pretime = "" 39 UserDefaults.standard.set(self.operate, forKey: "operate2") 40 }){ 41 42 ZStack{ 43 RoundedRectangle(cornerRadius: 5).frame(width: ListWidth / 7, height: ListHeight / 20).foregroundColor(.green) 44 Text("追加").foregroundColor(.white) 45 } 46 47 } 48 //taskとtimeの追加 49 50 } 51 52 53 54 55 NavigationView { 56 List{ 57 58 ForEach(operate, id: .id){num in 59 60 HStack{ 61 Text(num.task) 62 Spacer() 63 Text("(num.time)min") 64 } 65 66 67 68 } 69 .onDelete(perform: delete) 70 .onMove(perform: move) 71 72 73 } 74 .navigationBarItems(trailing: EditButton()) 75 .navigationBarTitle(Text("Operate"), displayMode: .large) 76 77 } 78 79 80 }.onAppear(){ 81 guard let defaultItem = UserDefaults.standard.array(forKey: "operate2") as? [Operate] else{return} 82 self.operate = defaultItem 83 } 84 85 86 87 88 89 } 90 91 92 93 func delete(at offsets: IndexSet){ 94 operate.remove(atOffsets: offsets) 95 } 96 97 func move(from source: IndexSet, to destination: Int){ 98 operate.move(fromOffsets: source, toOffset: destination) 99 } 100 101 102} 103 104 105 106struct ToDoList_Previews: PreviewProvider { 107 static var previews: some View { 108 OperateList() 109 } 110 111} 112 113 114 115
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。