簡體   English   中英

Swift:將一個對象數組和另一個對象數組保存到NSUserDefaults中

[英]Swift: Save an Array of Objects with another Array of Objects inside into NSUserDefaults

我一直在通過我的第一個應用程序進行工作,但是現在我需要保存用戶數據,但是不能保存。 我有一個對象數組,里面還有一個“ Questions”對象數組:

struct Question {
    let question: String
    let answer: String
}

struct UserEntry {
    let date: String
    let questions: [Question]
}

let userEntry = [UserEntries(date: todayDate, questions: [Question(answer: mood), Question(question: q1Text, answer: q1Answer), Question(question: q2Text, answer: q2Answer)])]

但是,這引發了錯誤:無法將類型'ThisViewController.Question'的值轉換為預期的元素類型'UserEntries.Question'。 在另一個堆棧答案之后,還為其創建了一個類:

class UserEntries: NSObject, NSCoding {
struct Question {
    var question: String
    var answer: String
}

var date: String
var questions: [Question]

init(date: String, questions: [Question]) {
    self.date = date
    self.questions = questions
}

required convenience init(coder aDecoder: NSCoder) {
    let date = aDecoder.decodeObject(forKey: "date") as! String
    let question = aDecoder.decodeObject(forKey: "questions")
    self.init(date: date, questions: question as! [UserEntries.Question])
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(date, forKey: "date")
    aCoder.encode(questions, forKey: "questions")
}
}

我這樣保存數據:

let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: userEntry)
UserDefaults.standard.set(encodedData, forKey: "allEntries")

我對什么地方很困惑,非常感謝任何幫助或指導!

您的問題是您在兩個地方創建了Question對象。

查看錯誤消息:

無法將類型“ ThisViewController.Question”的值轉換為預期的元素類型“ UserEntries.Question”。

現在看一下您提供的代碼,首先我想是來自YourViewController

struct Question {
    let question: String
    let answer: String
}

struct UserEntry {
    let date: String
    let questions: [Question]
}

let userEntry = [UserEntries(date: todayDate, questions: [Question(answer: mood), Question(question: q1Text, answer: q1Answer), Question(question: q2Text, answer: q2Answer)])]

接着:

class UserEntries: NSObject, NSCoding {
struct Question {
    var question: String
    var answer: String
}
...

所以......你有Question你定義ThisViewController ,然后你有另外一個Question你的內部定義UserEntries類。

編譯器告訴您,它認為您正在使用ThisViewController.Question ,您不能將其添加到UserEntries.Question因為這是編譯器的兩件事。

QuestionUserEntry邏輯移至符合NSCodingUserEntries類中之后,您在YourViewController中也不再需要它。

因此,請從YourViewController刪除QuestionUserEntry結構,以便您在UserEntries僅包含一個Question ,並且(應該)可以再次正常工作。

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM