保存到 NSUserDefaults 的字典总是返回 nil
Posted
技术标签:
【中文标题】保存到 NSUserDefaults 的字典总是返回 nil【英文标题】:Dictionary saved to NSUserDefaults always returns 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] = "***e"
scoreboard[11] = "jason"
data.setObject(scoreboard, forKey: scores)
data.objectForKey(scores) // Returns nil
【问题讨论】:
你需要在一个真实的项目上测试它。不是游乐场 【参考方案1】:第一个问题是不可能在 Playground 中使用 NSUserDefaults。
见:https://***.com/a/31210205/3498950
上面的代码在正常的ios项目中运行时发现了第二个问题。它抛出一个NSInvalidArgumentException
,因为字典是一个非属性列表对象,因为键需要是字符串类型。
虽然 NSDictionary 和 CFDictionary 对象允许它们的键是 任何类型的对象,如果键不是字符串对象,则 集合不是属性列表对象。
请参阅:Apple 文档中的“What is a Property List?”
【讨论】:
您是否尝试过上面的确切代码?它对我不起作用。它抛出异常:“尝试将非属性列表对象 6 = ***e; 3 = spencer; 11 = jason; 设置为键 scoreKey 的 NSUserDefaults/CFPreferences 值”。 (这是因为“property-list”字典必须有字符串作为键。请参阅 Apple 文档中的 "What is a property list?" 以及 this question。)以上是关于保存到 NSUserDefaults 的字典总是返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
将带有 NSAttributed 字符串的字典保存到 PList 或 NSUserDefaults
NSUserDefaults 并不总是保存我的 NSString 数据