項目中遇到需要存儲的數(shù)據(jù)目前有四種方式照捡,偏好設置(UserDefaults),文件存儲赦役,SQLite麻敌,CoreData,第一種方式比較簡單掂摔,第二種方式一般使用歸檔和解檔的方式實現(xiàn)术羔,先來簡單了解一下App基本目錄:
FlyElephant.png
偏好設置
偏好設置比較簡單,設置數(shù)據(jù)取數(shù)據(jù)乙漓,代碼如下:
let defaults:UserDefaults = UserDefaults.standard
defaults.setValue("FlyElephant", forKeyPath: "userName")
設置的數(shù)據(jù)最終保存在Plist文件中:
FlyElephant.png
歸檔和解檔
自定義對象存儲需要實現(xiàn)NSCoding協(xié)議中的encode和decode方法:
public protocol NSCoding {
public func encode(with aCoder: NSCoder)
public init?(coder aDecoder: NSCoder) // NS_DESIGNATED_INITIALIZER
}
自定義歸檔的Order對象:
class Order:NSObject,NSCoding {
var orderName:String = ""
var userName:String = ""
init(orderName:String, userName:String) {
self.orderName = orderName
self.userName = userName
super.init()
}
required init?(coder aDecoder: NSCoder) {
super.init()
self.orderName = aDecoder.decodeObject(forKey: "OrderName") as! String
self.userName = aDecoder.decodeObject(forKey: "UserName") as! String
}
func encode(with aCoder: NSCoder) {
aCoder.encode(self.orderName, forKey:"OrderName")
aCoder.encode(self.userName, forKey: "UserName")
}
}
歸檔操作:
@IBAction func archiverAction(_ sender: UIButton) {
let order:Order = Order(orderName: "123456789", userName: "FlyElephant")
NSKeyedArchiver.archiveRootObject(order, toFile: getSavePath())
}
解檔操作:
@IBAction func unArchiverAction(_ sender: UIButton) {
let order:Order = NSKeyedUnarchiver.unarchiveObject(withFile: getSavePath()) as! Order
print("訂單的名稱:\(order.orderName)---用戶名稱--\(order.userName)")
}
存儲路徑:
private func getSavePath()->String {
let cacheDir:String = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
let localPath:String = cacheDir.appending("TempTest.plist")
return localPath;
}
保存數(shù)據(jù):
FlyElephant.png