美文网首页
iOS Swift3.0解决归档、反归档在真机crash的方法

iOS Swift3.0解决归档、反归档在真机crash的方法

作者: Lukiwen | 来源:发表于2016-10-22 15:36 被阅读0次

    项目中用到了归档、反归档存储用户信息,废话少说(主要是文笔烂)上代码吧

    一开始的代码是这样的

    //声明写入的文件目录

    var filePath: AnyObject = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0] as AnyObject

    //拼接文件名

    var pathTxt = (filePath as! String) + "Document/userInfo.archive"

    //声明的类继承自NSObject 并添加NSCoding实现协议方法

    //归档方法

    func encode(with aCoder: NSCoder) {

    aCoder.encode(self.userName, forKey: "userName")

    aCoder.encode(self.passWord, forKey: "passWord")

    }

    //解档

    required init?(coder aDecoder: NSCoder) {

    super.init()

    self.userName = aDecoder.decodeObject(forKey: "userName")as! String

    self.passWord = aDecoder.decodeObject(forKey: "passWord")as! String

    }

    归档解档方法实现了,接下来就是写两个类方法,一个调用归档,一个解档

    //存储

    class func saveUserNameAndPassword(model : WHLUserModel)->Bool {

    return NSKeyedArchiver.archiveRootObject(model, toFile: pathTxt)

    }

    //获取

    class func getUserNameAndPassword()->WHLUserModel?{

    return NSKeyedUnarchiver.unarchiveObject(withFile: pathTxt)as? WHLUserModel

    }

    到这里归档解档的就封装好了,可以在需要的地方进行调用了,但是。。。接下里的情况就有些坑了

    在模拟器上运行没问题,问题出在了真机上运行,一调用就Crash了,问题出在哪呢?

    于是开始查资料,问题原来出在了文件目录上,大概就是模拟器是在PC上的目录可以不用指定那么明确,但是在手机上却不行,解决就是更改文件目录代码如下

    var file : Any = NSHomeDirectory() as NSString

    var pathTxt = (file as! NSString).appendingPathComponent("Documents/userInfo.archive")

    把上面的文件目录更改之后,真机上就不会崩溃了!

    完美!!!

    相关文章

      网友评论

          本文标题:iOS Swift3.0解决归档、反归档在真机crash的方法

          本文链接:https://www.haomeiwen.com/subject/bzoxettx.html