我需要保存名爲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
這是我的項目的名稱。 –