現在、スケジュールアプリを作成しております。
そこで、ユーザーが指定した「タイトル」、「開始時刻」、「終了時刻」を構造体として配列に追加し、UserDefaultsで保存したものを画面遷移後のTableViewCellで表示したいと思っております。
現在のコードでは、
「タイトル」、「開始時刻」、「終了時刻」を指定して画面遷移する直前にクラッシュしてしまいます。原因を調べていると構造体はそのままではUserDefaultsでは保存できないと知りました。
構造体をUserdefaultsで保存する方法がいくつかネットにあがっていたのですが、
どれを試してもうまくいきませんでした。
解決方法をご教示いただければ幸いです。
以下が構造体の宣言です。
/* 表示データ */ struct ScheduleData{ // スケジュールのコメント var title: String = "" // スケジュールの開始時間 var startDate: Date // スケジュールの終了時間 var endDate: Date init(title : String , startDate : Date , endDate : Date){ self.title = title self.startDate = startDate self.endDate = endDate } }
完了ボタン宣言部分
//完了ボタン 画面遷移 @IBAction func doneButton(_ sender: Any) { dataOut() saveData() performSegue(withIdentifier: "back", sender: nil) }
UserDefaults記載部分
func saveData() { dataOut() var dateFromString = myDateFormatter.date(from: dateTextField.text!) var dateFromString2 = myDateFormatter.date(from: dateTextField2.text!) if dateFromString != nil { if dateFromString2 != nil { if titleTextField.text! != nil { schedules.append(ScheduleData(title : titleTextField.text!, startDate : dateFromString!, endDate : dateFromString2!)) detailArray.append(detailTextView.text!) placeArray.append(placeTextField.text!) urlArray.append(urlTextField.text!) alarmDateArray.append(alarmTimeTextField.text!) UserDefaults.standard.set(schedules, forKey: "schedules") UserDefaults.standard.set(detailArray, forKey: "detailArray") UserDefaults.standard.set(placeArray, forKey: "placeArray") UserDefaults.standard.set(urlArray, forKey: "urlArray") UserDefaults.standard.set(alarmDateArray, forKey: "alarmDateArray") } } } else { warningAlertController() } }
func dataOut() { if UserDefaults.standard.object(forKey: "schedules") != nil { schedules = UserDefaults.standard.object(forKey: "schedules") as! [ScheduleData] } if UserDefaults.standard.object(forKey: "detailArray") != nil { detailArray = UserDefaults.standard.object(forKey: "detailArray") as! [String] } if UserDefaults.standard.object(forKey: "placeArray") != nil { placeArray = UserDefaults.standard.object(forKey: "placeArray") as! [String] } if UserDefaults.standard.object(forKey: "urlArray") != nil { urlArray = UserDefaults.standard.object(forKey: "urlArray") as! [String] } if UserDefaults.standard.object(forKey: "alarmDateArray") != nil { alarmDateArray = UserDefaults.standard.object(forKey: "alarmDateArray") as! [String] } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 06:02