私のアプリでは、データの永続性を保ってデータを保存しようとしましたが、このエラーが発生します: スーパークラス 'Day'エラーの指定された初期化子を呼び出さなければなりません。ここでスーパークラス 'Day'エラーの指定されたイニシャライザを呼び出さなければなりません
が私のコードです:
class Day: NSObject, NSCoding { // NEMA NSCODING I NSOBJECT
var dayName: String
var subjects: [Subject]?
init(dayName: String) {
self.dayName = dayName
}
struct PropertyKey {
static var dayName = "dayName"
static var subjects = "subjects"
}
func encode(with aCoder: NSCoder) {
aCoder.encode(dayName, forKey: PropertyKey.dayName)
aCoder.encode(subjects, forKey: PropertyKey.subjects)
}
// Archiving paths
static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("workingDays")//-namesto meals
required convenience init?(coder aDecoder: NSCoder) {
guard let dayName = aDecoder.decodeObject(forKey: PropertyKey.dayName) as? String else {
os_log("Unable to decode the dayName for a Day object.", log: OSLog.default, type: .debug)
return nil
}
let subjects = aDecoder.decodeObject(forKey: PropertyKey.subjects) as? [Subject]
self.init(dayName: dayName)
}
}
そして、ここでは他のクラスである:
class Subject: Day {
var subjectName: String
var startsAt: String?
init(dayName: String,subjectName: String) {
self.subjectName = subjectName
super.init(dayName: dayName)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder) // here I get the error
}
}
私はデータをこのように保存するつもりですDayクラスでのみデータ永続化を実装していますが、なぜそのエラーが発生しますか? 私は初心者です、私はこのリンゴのドキュメントに基づいて、それをやっている -
任意の助けもいただければ幸いです。あなたのケースでは、あなたがスーパーrequired
のconvenience initialiser
を作っ
Write the
required
modifier before the definition of a class initializer to indicate that every subclass of the class must implement that initializer:You do not write the
override
modifier when overriding a required designated initializer:
、サブクラスは今それを実装する必要がありますので:必要なInitializers-の定義により
実際には、このコードが何をするのか分かりません。これらのクラスのデータを永久に保存するか、それを行うために他のコードを書く必要がありますか?私はここでかなり新しいことに助けてくれてありがとう。 –