如何使用 UserData 从一个 ViewController 保存到另一个 - 提醒 XCode Swift

Posted

技术标签:

【中文标题】如何使用 UserData 从一个 ViewController 保存到另一个 - 提醒 XCode Swift【英文标题】:How To Use UserData to Save From One ViewController To Another - Reminders XCode Swift 【发布时间】:2021-04-13 08:27:08 【问题描述】:

代码中需要进行重大编辑 - 因为我是第一次编码,所以这没有意义。当我更新我的代码以及它何时可以工作时,我会更新问题。目前已关闭。

【问题讨论】:

【参考方案1】:

在 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")

现在就是这样,一旦您将新条目附加到模型属性,您的提醒将自动存储在用户默认值中。当您重新打开应用时,系统会从用户默认设置中获取提醒。

【讨论】:

以上是关于如何使用 UserData 从一个 ViewController 保存到另一个 - 提醒 XCode Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何从 WM_CTLCOLORLISTBOX 中检索 Combobox 的 GWLP_USERDATA?

如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例

present的时候是可以直接回到第一个viewcon的

如何在 AWS Lambda 上创建 EC2 时将脚本传递给 UserData 字段?

TypeError:即使 userData 是数组,userData.map 也不是函数

将数组从 ViewController 传递给 AppDelegate