[英]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
因為這是編譯器的兩件事。
將Question
和UserEntry
邏輯移至符合NSCoding
的UserEntries
類中之后,您在YourViewController
中也不再需要它。
因此,請從YourViewController
刪除Question
和UserEntry
結構,以便您在UserEntries
僅包含一個Question
,並且(應該)可以再次正常工作。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.