UserDefaults 不适用于 MSMessagesAppViewController

Posted

技术标签:

【中文标题】UserDefaults 不适用于 MSMessagesAppViewController【英文标题】:UserDefaults not working with MSMessagesAppViewController 【发布时间】:2020-04-06 03:52:04 【问题描述】:

我正在尝试使用 UIAlertController 将数据保存到 UserDefaults,但代码无法检索数据。

检索数据

    func displayCreatedPhrases()
    phrases = uDefaults.stringArray(forKey: "createdPhrases") ?? [String]()
    print(phrases)
   

设置数据

 self.uDefaults.set(textfield.text, forKey: "createdPhrases")
 self.uDefaults.synchronize()
 print("Saved the data!")
 self.phraseTableView.reloadData()

【问题讨论】:

【参考方案1】:

您将string 设置为键“createdPhrases”的值,然后要求 uDefaults 返回一个字符串数组?

func displayCreatedPhrases() 
    phrases = uDefaults.value(forKey: "createdPhrases") as? String
    print(phrases)

上面的代码应该适合你。 也不需要使用下面的行 (Link to UserDefaults synchronize)

self.uDefaults.synchronize()

【讨论】:

【参考方案2】:

原因:

textfield.text 的类型为 String? 而不是 [String]。在您的代码中,您将数据保存为 String 值并将其检索为 [String] 值。这就是原因,检索数据不起作用。

解决方案:

func displayCreatedPhrases()
    phrases = uDefaults.string(forKey: "createdPhrases") ?? ""
    print(phrases)

另外,phrases 必须是 String 类型。

【讨论】:

以上是关于UserDefaults 不适用于 MSMessagesAppViewController的主要内容,如果未能解决你的问题,请参考以下文章

用于单元测试的 UserDefaults 实例?

如何删除仅一个子项目的所有 userdefaults 数据?

将 DateComponents 数组设置为 UserDefaults 不起作用

如何使用全局变量数组实现 userDefaults

Tensorflow - 多 GPU 不适用于模型(输入),也不适用于计算梯度

使用 UserDefaults 保存数组