【问题标题】:How to make only one piece of data affected by UserDefaults?如何让UserDefaults只影响一条数据?
【发布时间】:2021-05-12 09:08:21
【问题描述】:

所以我昨晚和今天早上刚刚对 UserDefaults 进行了一些研究,我想知道如何以某种方式使用字典。我的问题是,当用户按下某个按钮并设置 UserDefaults 字典数据时,应用程序中的每条数据也会受到影响。我的目标是只影响那条数据,其余的保持与以前相同。

    let eventDict = ["eventName": "\(selectedEventName!)", "purchased": true] as [String : Any]

这是我设置的字典,很简单。当按下按钮时,我运行这行代码。

self.defaults.set(eventDict, forKey: "eventDict")

这些工作完美,我检查了 .plist 文件,一切都正确,它显示事件名称和购买为 1(真)。

现在我尝试在我购买事件的页面的viewDidLoad() 中添加一些逻辑,它可以工作,但是当我检查所有其他事件时,页面具有相同的结果,这不是我想要的。

 let checkEventStatus = defaults.dictionary(forKey: "eventDict")
    
    
    if checkEventStatus?.isEmpty == false {
        viewPurchaseButton.isHidden = false
        cancelPurchaseButton.isHidden = false
        purchaseTicketButton.isHidden = true
        creditCard.isHidden = true
    } else {
        viewPurchaseButton.isHidden = true
        cancelPurchaseButton.isHidden = true
    }

我不知道如何从字典中的键中检索确切的值,所以我只使用了isEmpty(),我认为这是有道理的,因为如果没有购买该活动,它就没有一本字典,里面有它的名字。

这些是我想在按下购买按钮时显示的按钮。购买按钮现在是隐藏的,因为它已经被按下,所以设置了 UserDefault 数据,这会影响按钮的可见性。现在,当我检查所有其他事件时,屏幕是相同的。我只是希望每个屏幕都以某种方式出现,具体取决于是否购买了活动或不使用 UserDefaults。

【问题讨论】:

    标签: ios swift dictionary nsuserdefaults userdefaults


    【解决方案1】:

    我认为您有一个根本问题 - 您实际上并没有首先将任何喜欢的购买状态保存到事件中,因此您无法确定事件的状态并设置按钮状态因此。您需要一个将事件名称与事件状态相关联的数据结构。

    我认为您需要更多地考虑您的数据和工作流程,但作为一个可以帮助您入门的简单示例,您可以创建一个 Event 结构来保存名称和状态。您还可以建立购买日期和成本...

    struct Event {
      name: String
      purchased: Bool
      purchaseDate: Date?
      cost: Double?
    }
    

    然后您可以继续使用 [String: Event] 形式的字典,其中键是事件 ID 的某种字符串,但现在使用数组 [Event] 可能会更容易

    然后您可以遍历显示所有事件的数组(或过滤以获取特定事件),然后相应地设置屏幕,例如,如果 event 是数组中的一个项目

    eventNameField.text = event.name
    if purchased, let date = event.purchaseDate, let cost = event.cost {
      purchasedDateField.text = "\(date)" //would really be a dateFormatted date
      costFiled.text = "\(cost)"
    }
    purchaseButton.isHidden = event.purchased
    cancelButton.isHidden = !event.purchased
    

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 2019-09-18
      • 2018-02-04
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2012-05-05
      • 2022-01-19
      相关资源
      最近更新 更多