2017-08-25 8 views
1

私は一般的にiOS開発に比較的新しいですが、私はこのアプリケーションをコーディングしています。SwiftのNSCodingはデータを正しくアーカイブしていませんか?

私はカスタムオブジェクト "Semester"、 "Course"、 "Assignments"を持っています。学期にはコースの配列が含まれ、コースには割り当ての配列が含まれます。私は学期とコース情報を適切にアーカイブすることができますが、何らかの理由で割り当て情報を読み取ることができません。

学期:

required init?(coder aDecoder: NSCoder) { 
    self.name = "" 

    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "name") as? String { 
     name = archivedName 
    } 
    if let archivedCourses = aDecoder.decodeObject(forKey: "courses") as? [Course] { 
     courses = archivedCourses 
    } 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: "name") 
    aCoder.encode(courses, forKey: "courses") 
} 

コース:

required init?(coder aDecoder: NSCoder) { 
    self.name = "" 
    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "courseName") as? String { 
     name = archivedName 
    } 
    if let archivedAssignments = aDecoder.decodeObject(forKey: "assignments") as? [Assignment] { 
     assignments = archivedAssignments 
    } 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: "courseName") 
    aCoder.encode(assignments, forKey: "assignments") 

が割り当て:

required init?(coder aDecoder: NSCoder) { 
    self.name = "" 
    self.grade = 0 
    self.weight = 0 
    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "assignmentName") as? String, let archivedGrade = aDecoder.decodeObject(forKey: "assignmentGrade") as? Int, let archivedWeight = aDecoder.decodeObject(forKey: "assignmentWeight") as? Int { 
     name = archivedName 
     grade = archivedGrade 
     weight = archivedWeight 
    } 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: "assignmentName") 
    aCoder.encode(grade, forKey: "assignmentGrade") 
    aCoder.encode(weight, forKey: "assignmentWeight") 
} 

私がなぜわからないが、私はしようとすると、割り当ての詳細を読むことができませんオブジェクトをデコードします。私は通常、あなたの問題に翻訳Int

このような
if decoder.containsValue(forKey: "teamNumber"){ 
    self.teamNumber = decoder.decodeInteger(forKey: "teamNumber") 
} 

をデコード

+0

を助けていインクを解読する特別な方法 –

+0

私の答えはあなたを助けましたか?どんなフィードバックもありがたいです。ありがとうございました –

+0

はい!ご協力いただきありがとうございます!! –

答えて

0

があなたのAssignmentクラスのinit?(coder aDecoder: NSCoder)方法

required init?(coder aDecoder: NSCoder) { 

    self.name = "" 
    self.grade = 0 
    self.weight = 0 
    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "assignmentName") as? String{ 
     self.name = archivedName 
    } 

    if decoder.containsValue(forKey: "assignmentGrade"){ 
     self.grade = decoder.decodeInteger(forKey: "assignmentGrade") 
    } 

    if decoder.containsValue(forKey: "assignmentWeight"){ 
     self.weight = decoder.decodeInteger(forKey: "assignmentWeight") 
    } 

} 

希望を変更、次のようになりますこれはdecoderObject

関連する問題