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

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

一开始的代码是这样的

//声明写入的文件目录

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的方法)