Swift NSCoding不起作用

克里斯

NSCoding在Swift中使用遇到问题我尝试实现该协议,但是每当我调用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];

}
杰瑞德(Jared Messenger)

自问这个问题以来,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()
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关闭nsviewcontroller swift不起作用

来自分类Dev

UIAlertView在Swift中不起作用

来自分类Dev

功能在Swift中不起作用

来自分类Dev

Swift UIApplication.setStatusBarStyle不起作用

来自分类Dev

Swift中的可选分配不起作用?

来自分类Dev

Swift-Switch语句不起作用

来自分类Dev

Swift CoreData子类不起作用

来自分类Dev

UITextField inputView在Swift中不起作用

来自分类Dev

Swift:按钮启用不起作用?

来自分类Dev

Swift-UIActionSheet事件不起作用

来自分类Dev

presentViewController在Swift中不起作用

来自分类Dev

perfrmSegueWithIdentifier()在Swift iOS中不起作用

来自分类Dev

KeyDown不起作用,Swift

来自分类Dev

Swift泛型函数不起作用

来自分类Dev

Swift SequenceType不起作用

来自分类Dev

Swift-AVAudioPlayer不起作用

来自分类Dev

ADInterstitialAd在iPad Swift上不起作用

来自分类Dev

MPMoviePlayerController不起作用-Swift

来自分类Dev

Swift UIButton覆盖,setImage不起作用

来自分类Dev

Swift NSEvent不起作用

来自分类Dev

UIDevice在Swift 2.0中不起作用

来自分类Dev

Swift for循环不起作用

来自分类Dev

scheduleLocalNotification在Swift 2.0中不起作用

来自分类Dev

在Swift中创建块不起作用

来自分类Dev

Swift 2.2,包含方法不起作用

来自分类Dev

searchBarSearchButtonClicked不起作用Swift

来自分类Dev

Swift setToolbarHidden不起作用

来自分类Dev

Swift 请求不起作用

来自分类Dev

Swift 协议不起作用