在NSUserDefaults中保存Swift中的数据数组

时间:2015-09-22 13:25:46

标签: ios arrays swift nsuserdefaults

我在Swift的{​​{1}}中创建了一系列数据。

我已使用以下代码设置了存储数据的结构:

Xcode

数组工作正常,数组一直保持到应用程序关闭。

然后我使用这种结构创建了一个数组:

struct groups {
    var groupName: String!
    var groupPeripherals: [CBPeripheral]!
}

在整个应用程序中,我将数据附加到此数组,例如:

var groupArray = [groups]()

我写了“外围信息”,它实际上将groupArray.append(groups(groupName: "Group 1", groupPeripherals: [peripheral info...])) 信息传递给了数组。

无论如何,问题。我希望能够将此数组存储在CBPeripheral中,并在重新启动应用程序时能够读取它。我该怎么做呢?我知道如何使用NSUserDefaults与字符串和整数等,但不是这种数组。这里有任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:2)

NSUserDefaults只能保存“property list objects”。 (请参阅链接以获取支持的数据类型列表。)

为了将数组保存为用户默认值,数组中“object graph”中的每个对象都必须是属性列表类型。

您需要将结构转换为属性列表类型。您可以为对象实现NSCoding,然后使用NSKeyedArchiver方法archivedDataWithRootObject将数组转换为NSData并保存。

或者,您可以在结构中定义帮助方法,将其转换为字典或从字典转换,然后使用filter()groups结构数组转换为字典数组并将其保存到用户默认值

编辑:

我看到你的结构包含CBPeripheral个对象。您需要将这些转换为可以保存为用户默认值的表单。一种选择是为CBPeripheral创建一个扩展,增加NSCoding支持。

通常,您希望避免将大量数据保存到用户默认值。您可能希望将数据保存到文档目录中的文件中。 (使用您用来写入用户默认值的相同技术。)