繁体   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