gpt4 book ai didi

swift - 使用 NSCoding 保存自定义对象数组

转载 作者:搜寻专家 更新时间:2023-11-01 06:21:02 37 4
gpt4 key购买 nike

我正在尝试制作一个闹钟应用,以了解如何使用保存的自定义对象数组。

我的项目设置有一个自定义“警报”对象,其中包含有关每个警报的所有信息,并且我创建了一个继承 NSObject 和 NSCoding 的类。

这里是报警对象类

import Foundation

class Alarm : NSObject {
var name : String
var active : Bool
var days : [String]
var sound : [String:Int] //Will change later...... I think?.....
var time : NSDate

init(name : String, active : Bool, days : [String], sound : [String:Int], time : NSDate) {
self.name = name
self.active = active
self.days = days
self.sound = sound
self.time = time
}
}

继承了 NSObject 和 NSCoding 的自定义类

import UIKit

class Alarms: NSObject, NSCoding {
var alarmList : [Alarm]

init(alarmList : [Alarm]) {
self.alarmList = alarmList
}

required convenience init?(coder decoder: NSCoder) {
guard let alarmList = decoder.decodeObjectForKey("alarms") as? [Alarm]
else { return nil }

self.init(
alarmList : alarmList
)
}

func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(alarmList, forKey: "alarms")
}
}

出于测试目的,我有一个连接到按钮的保存功能。这是该函数。

func save(sender: AnyObject?) {
//Save with NSKeyArchiver
print("Save: \(path)")

var success = false

success = NSKeyedArchiver.archiveRootObject(alarmItems, toFile: path)

if success {
print("Saved Alarms")
} else {
print("Didn't Save Alarms")
}

}

我引用了一个在我的 ViewDidLoad() 函数中设置的路径变量

path = fileInDocumentsDirectory("alarms.plist")

现在,当我运行应用程序并添加警报并单击保存按钮时,它崩溃并出现以下错误

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SavingAlarmsApp.Alarm encodeWithCoder:]: unrecognized selector sent to instance 0x7fbe3ac789a0'

我做错了什么?我已经能够使用这段代码保存一个字符串数组。

最佳答案

您只是忘记了 Alarm 类。它也应该实现 NSCoding 协议(protocol)。

关于swift - 使用 NSCoding 保存自定义对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34127828/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com