我需要保存名为Day的对象。Swift - NSCoding归档不起作用
class TimeSheet: NSObject, NSCoding{
static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("TimeSheet")
private static var days:[Day] = []
required init?(coder aDecoder: NSCoder){
guard let days = aDecoder.decodeObject(forKey: "days") as? [Day] else{
os_log("No previous day data available.", log: OSLog.default, type: .debug)
return nil
}
TimeSheet.days = days
}
func encode(with aCoder: NSCoder){
aCoder.encode(TimeSheet.days, forKey: "days")
}
static func addDay(day: Day) -> Bool{
TimeSheet.days.append(day)
return TimeSheet.submitDay()
}
private static func submitDay() -> Bool{
return NSKeyedArchiver.archiveRootObject(TimeSheet.days, toFile: TimeSheet.ArchiveURL.path)
}
static func loadDays(){
guard let tempDays = NSKeyedUnarchiver.unarchiveObject(withFile: TimeSheet.ArchiveURL.path) as? [Day] else{
print("Could not loaded...")
return
}
TimeSheet.days = tempDays
}
我尝试从不同的类实现:按下和程序打submitDay功能,直到保存按钮
@objc private func buttonPressed(button: UIButton!){
if(TimeSheet.addDay(day: day)){
print("Saved")
}else{
print("Not Saved")
}
}
一切工作完全正常。 终端抛出终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因是:“ - [DayManager.Day encodeWithCoder:]:无法识别的选择发送到实例0x6000003391e0”
这是使用NSCoding我的第一次,我无法弄清楚什么是出错...
任何帮助将不胜感激。 谢谢
什么是DayManager?您的Day课程是否符合NSCoding? –
错误显示'日'不符合'NSCoding' – vadian
这是我的项目的名称。 –