私は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
}
そして、私は別のクラスから達成しよう:ボタンを保存するまで、すべてが完璧にうまく動作します
@objc private func buttonPressed(button: UIButton!){
if(TimeSheet.addDay(day: day)){
print("Saved")
}else{
print("Not Saved")
}
}
押すとプログラムがsubmitDay機能を打っています。 ターミナルがキャッチされない例外により「NSInvalidArgumentException」、理由にアプリを終了スロー:「 - [DayManager.Day encodeWithCoder:]:認識されていないセレクタは、インスタンス0x6000003391e0に送られた」
これはNSCodingを使用して私の最初の時間であり、あるものを私は把握することはできません間違っている...
助けていただければ幸いです。 ありがとうございました
DayManagerとは何ですか?あなたのDayクラスはNSCodingに準拠していますか? –
エラーは「Day」が 'NSCoding'に従わないことを示します – vadian
これは私のプロジェクトの名前です。 –