如何解决如何使用 UserData 将一个 ViewController 保存到另一个 - 提醒 XCode Swift
代码中需要进行重大编辑 - 因为我是第一次编码,所以没有意义。当我更新我的代码以及它何时起作用时,我会更新问题。目前已关闭。
解决方法
在 SetReminderViewController 中,您总是会覆盖用户默认值中的标题和日期键路径。因此,您的第一个提醒将被您的第二个提醒覆盖。您应该将它们存储在某种数组中。
使您的 MyReminder 模型可编码,从而允许您将模型存储在 UserDefaults 中:
struct MyReminder: Codable {
let title: String
let date: Date
let identifier: String
}
为了检索和存储您的提醒,您可以更改 RemindersViewController 中的模型属性:
var models: [MyReminder] {
get {
// Retrieve data from user defaults or return an empty array
guard
let data = UserDefaults.standard.data(forKey: "reminders"),let reminders = try? JSONDecoder().decode([MyReminder].self,from: data)
else {
return []
}
return reminders
}
set {
// Store data in user defaults when encoding succeeds
guard let data = try? JSONEncoder().encode(newValue) else { return }
UserDefaults.standard.setValue(data,forKey: "reminders")
}
}
现在您的模型属性处理所有用户默认逻辑,您可以从 SetReminderViewController 中删除该逻辑:
// Remove these
userDefaults.setValue(titleField.text,forKeyPath: "title")
userDefaults.setValue(datePicker.date,forKeyPath: "date")
现在就是这样,一旦您将新条目附加到模型属性中,您的提醒将自动存储在用户默认值中。当您重新打开应用时,系统会从用户默认设置中提取提醒。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。