Swift NSCoding不工作

我在Swift中使用NSCoding有困难。我尝试实现协议,但是当我调用save()方法时,我会遇到崩溃。 Xcode把我拉到了encodeWithCoder的行上。这是我的代码,任何建议都会顺理成章。
class CourseList: NSObject,NSCoding {
    ...

    init(coder aDecoder: NSCoder!){
        super.init()
        if aDecoder != nil {
            self.courses = aDecoder.decodeObjectForKey("courses") as Dictionary<String,course>
        }
    }

    func encodeWithCoder(aCoder: NSCoder!) {
        aCoder!.encodeObject(self.courses,forKey: "courses") // EXC_BAD_INSTRUCTOIN


    }
}

我写了save()和load()来调用ViewController。

func save() {
    var archivedobject = NSKeyedArchiver.archivedDataWithRootObject(History)  //NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    var defaults = NSUserDefaults.standardUserDefaults()  //[defaults setobject:archivedobject forKey:<key_for_archived_object>];
    defaults.setobject(History.courses,forKey: "courses")
    defaults.synchronize()
}

func load() {
    var defaults = NSUserDefaults.standardUserDefaults()  // NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    var archivedobject = defaults.objectForKey("courses") as NSData  // NSData *archivedobject = [defaults objectForKey:<key_for_archived_object>];
    History = NSKeyedUnarchiver.unarchiveObjectWithData(archivedobject) as Dictionary<String,course>   //<your_class> *obj = (<your_class> *)[NSKeyedUnarchiver unarchiveObjectWithData:archivedobject];

}
自从提出这个问题以来,Swift已经有所改变了。我无法重现你所看到的错误,但是我能够使用下面的代码让NSCoding与Swift 1.0一起工作。
class CourseList: NSObject,NSCoding
{
    var myCourses: Dictionary<String,String>?

    override init() {}

    required init(coder aDecoder: NSCoder) {
        self.myCourses  = aDecoder.decodeObjectForKey("myCourses") as? Dictionary
    }

    func encodeWithCoder(aCoder: NSCoder) {
        if let courses = self.myCourses{
            aCoder.encodeObject(courses,forKey: "myCourses")
        }
    }

    func populateCourses() {
        self.myCourses = ["cs101": "Hello World"]
    }

    func save() {
        let data = NSKeyedArchiver.archivedDataWithRootObject(self)
        NSUserDefaults.standardUserDefaults().setobject(data,forKey: "courseList")
    }

    func clear() {
        NSUserDefaults.standardUserDefaults().removeObjectForKey("courseList")
    }

    class func loadSaved() -> CourseList? {
        if let data = NSUserDefaults.standardUserDefaults().objectForKey("courseList") as? NSData {
            return NSKeyedUnarchiver.unarchiveObjectWithData(data) as? CourseList
        }
        return nil
    }
}

加载保存的实例,或者根据需要创建一个新的实例

// Try loading a saved version first
    if let courseLs = CourseList.loadSaved() {
        println("loaded Save CourseList")
    } else {
        // Create a new Course List
        let courseLs: CourseList = CourseList()
        courseLs.populateCourses()
        courseLs.save()
    }

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...