ios - 如何将自定义结构数组保存到 plist swift

标签 ios arrays swift plist

我正在尝试将警报数据保存到 plist,它是以类 alertData 的数组的形式,我能找到的所有信息都指向对其进行编码,然后将其放入数组中,但是我'我对这是做什么感到困惑?而且我也不知道该怎么做,这是我的 Playground :任何帮助都会很棒

类(我正在尝试保存这些类的数组)

public class alertData: NSObject, NSCoding {
//Properties of the timer data - make optionals optional i.e. 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)

提前感谢任何提示/建议

最佳答案

您不应该自己调用 encodeWithCoder()。使用 NSKeyedArchiverNSKeyedUnarchiverinit(coder:)encodeWithCoder() 将根据需要由归档器/解档器调用。

将您的 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")
}

(还可以考虑将您的 key 命名为与其属性相同的名称,例如 “alertCounter” 用于 alertCounter。)

关于ios - 如何将自定义结构数组保存到 plist swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637377/

相关文章:

c# - 如何将框架 libz.dylib 和 libxml2.dylib 添加到 MonoTouch 中的 gcc_flags 参数?

ios - HKHealthStore 类型的值没有类型 dateOfBirthWithError

ios - 如何使用动画*连续关闭两个模态视图 Controller ?

ios - iOS LinkedIn SDK 没有回调

html - 如何向多个选定的用户发送邮件

javascript - 计算 2 个数组中的每个值,如果每个数组的长度不相同,则推送长度较长的值

iOS Swift 将应用移至后台

php - 如何使用mysqli_real_escape_string来存储由json ajax解析的数组?

xcode - 快速生成节点无限

ios - 如何使 iOS 中 Google map 上的标记在没有动画的情况下改变其位置