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을 준수합니까? –
오류는 'Day'가'NSCoding'을 따르지 않음을 나타냅니다. – vadian
내 프로젝트의 이름입니다. –