【问题标题】:Dictionary saved to NSUserDefaults always returns nil保存到 NSUserDefaults 的字典总是返回 nil
【发布时间】:2016-05-02 05:53:10
【问题描述】:

我正在尝试使用setObject() 函数将字典保存到NSUserDefaults,但是当我使用objectForKey() 函数检索字典时,它返回nil。为什么会这样?

var data = NSUserDefaults.standardUserDefaults();
var scoreboard = [Int : String]()
let scores = "scoresKey"

scoreboard[3] = "spencer"
scoreboard[6] = "brooke"
scoreboard[11] = "jason"

data.setObject(scoreboard, forKey: scores)
data.objectForKey(scores) // Returns nil

【问题讨论】:

  • 你需要在一个真实的项目上测试它。不是游乐场

标签: swift dictionary nsuserdefaults


【解决方案1】:

第一个问题是不可能在 Playground 中使用 NSUserDefaults。

见:https://stackoverflow.com/a/31210205/3498950

上面的代码在正常的iOS项目中运行时发现了第二个问题。它抛出一个NSInvalidArgumentException,因为字典是一个非属性列表对象,因为键需要是字符串类型。

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

请参阅:Apple 文档中的“What is a Property List?

【讨论】:

  • 您是否尝试过上面的确切代码?它对我不起作用。它抛出异常:“尝试将非属性列表对象 { 6 = brooke; 3 = spencer; 11 = jason; } 设置为键 scoreKey 的 NSUserDefaults/CFPreferences 值”。
  • (这是因为“property-list”字典必须有字符串作为键。请参阅 Apple 文档中的 "What is a property list?" 以及 this question。)
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
相关资源
最近更新 更多