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")
把上面的文件目录更改之后,真机上就不会崩溃了!
完美!!!