如何保存一个自定义结构数组以快速地移动

我试图将警报数据保存到一个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() 。 使用NSKeyedArchiverNSKeyedUnarchiverinit(coder:)encodeWithCoder()将根据archiver / unarchiver的需要进行调用。

alertData NSCodingalertData实例(这应该是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" 。)