我在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
与字符串和整数等,但不是这种数组。这里有任何帮助。
谢谢!
答案 0 :(得分:2)
NSUserDefaults只能保存“property list objects”。 (请参阅链接以获取支持的数据类型列表。)
为了将数组保存为用户默认值,数组中“object graph”中的每个对象都必须是属性列表类型。
您需要将结构转换为属性列表类型。您可以为对象实现NSCoding,然后使用NSKeyedArchiver
方法archivedDataWithRootObject
将数组转换为NSData并保存。
或者,您可以在结构中定义帮助方法,将其转换为字典或从字典转换,然后使用filter()
将groups
结构数组转换为字典数组并将其保存到用户默认值
我看到你的结构包含CBPeripheral
个对象。您需要将这些转换为可以保存为用户默认值的表单。一种选择是为CBPeripheral创建一个扩展,增加NSCoding支持。
通常,您希望避免将大量数据保存到用户默认值。您可能希望将数据保存到文档目录中的文件中。 (使用您用来写入用户默认值的相同技术。)