我有一个数组,我似乎无法将其保存为Swift的用户默认值。
var shoppingLists = [
(name: "Giant", items: ["Salad", "Bread"]),
(name: "ShopRite", items: ["Chips", "Dip"])
]
NSUserDefaults.standardUserDefaults().setObject(shoppingLists, forKey: "GroceryList");
NSUserDefaults.standardUserDefaults().synchronize()
任何想法我可能做错了什么?如果我有一个简单的数组,如var list = [1,2,3,4],我可以保存它。但我似乎无法保存目前的结构。
答案 0 :(得分:7)
这不是多维数组。这是一组元组。元组不符合NSCoding
,因此您无法将它们放入NSUserDefaults。
您应该使用实现NSCoding
的简单类替换元组。然后,您可以使用NSKeyedArchiver
将其序列化为NSUserDefaults
。有关详细信息,请参阅Archives and Serializations Programming Guide。
或者,您可以将其编码为字典数组:
var shoppingLists = [
["name": "Giant", "items": ["Salad", "Bread"]],
["name": "ShopRite", "items": ["Chips", "Dip"]]
]
这对于存储来说并不错,但我不会以这种方式使用数据。创建实际的模型类型而不是依赖于元组或字典几乎总是更好。
(旁注:几乎从来没有理由打电话给synchronize()
。它只是暂停你的程序。它实际上并没有导致任何东西被写入。)