如何保存一个自定义结构数组以快速地移动
我试图将警报数据保存到一个plist,它是在类alertData的数组的forms,所有的信息,我可以find点编码,然后把它放在数组中,但我很困惑这是什么? 而我也无法弄清楚如何做到这一点,这里是我的操场:任何帮助将是伟大的
类(我试图保存这些数组)
public class alertData: NSObject, NSCoding { //Properties of the timer data - make optionals optional ie alert count etc. var alertCounter: NSTimeInterval? var alertText: String? var alertColor: UIColor? var alertColorIndex: Int? //initialisation init(alertCounter: Double, alertText: String, alertColor: UIColor, alertColourIndex: Int) { self.alertCounter = alertCounter self.alertText = alertText self.alertColor = alertColor self.alertColorIndex = alertColourIndex } public required init(coder aDecoder: NSCoder) { alertCounter = aDecoder.decodeDoubleForKey("Item1") alertText = aDecoder.decodeObjectForKey("Item2") as? String alertColor = aDecoder.decodeObjectForKey("Item3") as? UIColor alertColorIndex = aDecoder.decodeIntegerForKey("Item4") } public func encodeWithCoder(aCoder: NSCoder) { alertCounter = aCoder.decodeDoubleForKey("Item1") alertText = aCoder.decodeObjectForKey("Item2") as? String alertColor = aCoder.decodeObjectForKey("Item3") as? UIColor alertColorIndex = aCoder.decodeIntegerForKey("Item4") } }
该数组(当我在应用程序中添加警报数据时填充):
var alertDataSource: [alertData] = []
并对其进行编码:
let archive = NSKeyedArchiver.archivedDataWithRootObject(self.alertDataSource) print(archive)
并提取它:
let result = NSKeyedUnarchiver.unarchiveObjectWithData(archive) print(result)
预先感谢任何提示/build议
你不打算自己调用encodeWithCoder()
。 使用NSKeyedArchiver
和NSKeyedUnarchiver
。 init(coder:)
和encodeWithCoder()
将根据archiver / unarchiver的需要进行调用。
将alertData
NSCoding
的alertData
实例(这应该是AlertData
因为类名应该是正确的)放入一个数组(或字典,如果你愿意的话),执行下面的操作:
let archive = NSKeyedArchiver.archivedDataWithRootObject(yourArrayOfAlertData)
在这种情况下, archive
将是一个NSData
实例。
更新
其实,我想我第一次错过了,但你的encode...()
方法是不正确的。 完全一样。 考虑与以下的区别:
public func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeDouble(alertCounter, forKey:"Item1") aCoder.encodeObject(alertText, forKey:"Item2") aCoder.encodeObject(alertColor , forKey:"Item3") aCoder.encodeInteger(alertColorIndex, forKey:"Item4") }
(也可以考虑命名您的键与它们的属性相同,例如"alertCounter"
。)
- ios中block(Objective C)和closure(Swift)之间的区别
- 如何在Swift / Xcode中sorting1个数组,并通过相同的键更改重新排列多个其他数组
- 重新加载UITableView显示错误?
- 如何在CloudKit Dashboard中使用“fetchWithRecordID”自动生成ID?
- 从HealthKit获取一系列血糖logging
- animationbuttonAllowuserinteraction不起作用
- 在swift中创build一个viewcontroller的单例
- 如何在UIImageView的顶部添加交互式UILabel?
- “不能分配给属性:”任何“是不可变的”错误