【问题标题】:NSUser DefaultsNSUser 默认值
【发布时间】:2016-05-31 02:45:40
【问题描述】:

我尝试了一个不起作用的答案:Swift Saving user NSUser Defaults

我的问题是我想保存:var myDict = [Int:String]() 永久使用 NSUser 默认值。

我的代码是:

let userDefaults = NSUserDefaults.standardUserDefaults()

@IBAction func AddOneWord(sender: AnyObject) {
    if newWord.text != "" {

        myDict.updateValue(newWord.text!, forKey: 1)

        self.Word1Dictionnary.text = myDict[1]

        userDefaults.setValue(myDict, forKey: "1")
        userDefaults.synchronize()
    }
}

问题是我在单击我的应用程序(正在运行)上的按钮时出现此错误:Thread 1 : Signal SIGABRT

【问题讨论】:

  • 能否请您显示错误内容?谢谢!
  • 在我的帖子中,链接“Thead 1 : Signal SIGABRT”并没有说其他任何内容。
  • 你应该在底部的调试日志中得到一些东西。它说什么?
  • 您有 2 个选项:将字典声明为 [String:String] 或使用符合 NSCoding 协议的自定义类。并且不要使用setValue:forKeysynchronize()。前者语法为setObject:forKey,后者不需要。
  • 你可以使用任何东西,只要它是一个字符串。但是为什么不使用字符串表示"1" 而不是整数值1

标签: swift nsuserdefaults sigabrt


【解决方案1】:

NSUserDefaults 只能存储属性列表对象。如Property List Programming Guide中所述:

虽然 NSDictionary 和 CFDictionary 对象允许它们的键是任何类型的对象,但如果键不是字符串对象,则集合不是属性列表对象。

您不能将[Int: String] 存储在NSUserDefaults 中。键必须是字符串。

【讨论】:

  • 是的,我现在明白这一点,但我做不到。为了存储我的 [Int: String] 我尝试使用: userDefaults.setValue(myDict, forKey: "Dictionnary") userDefaults.synchronize() 我有同样的错误:(红色信号)信号 SIGABRT。我已经看过一些视频和帖子来解决它,但它不起作用。
  • 我的意思是你不能在 NSUserDefaults 中存储 [Int: String]。键不能是 Int。密钥必须是一个字符串才能将其存储在默认值中。用户默认值不是通用存储。它用于存储首选项。
  • 好的,我明白你说的了。我可以使用一些键,例如:word1、word2、word3...我将它们编码为“word \n”,其中 n 将是 1,2,3...n?
  • 见上面 vadian 的评论。你可以使用任何你喜欢的东西,只要键是一个字符串。
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 2013-03-27
  • 1970-01-01
  • 2018-09-12
  • 2015-05-22
  • 1970-01-01
相关资源
最近更新 更多