在 UserDefaults 中存储自定义 class
Store custom class in UserDefaults
我正在尝试在用户默认设置中存储自定义 class 但遇到异常
terminating with uncaught exception of type NSException
我的class如下:交易
import Foundation
import SwiftyJSON
class Transactions: NSObject,NSCoding {
var transOBJ = [JSON]()
init(transOBJ:[JSON]) {
self.transOBJ = transOBJ
}
required convenience init(coder aDecoder:NSCoder) {
let obj = aDecoder.decodeObject(forKey: "OBJ") as! [JSON]
self.init(transOBJ: obj)
}
func encode(with aCoder: NSCoder) {
aCoder.encode(transOBJ, forKey: "OBJ")
}
}
异常抛出 aCoder.encode(transOBJ, forKey: "OBJ")
保存用户默认值的代码是:
let trans = [Transactions(transOBJ: self.transactionObjs)]
var userDefaults = UserDefaults.standard
let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: trans)
userDefaults.set(encodedData, forKey: "transactions")
userDefaults.synchronize()
更新 1
我在 Alamofire 请求函数中调用用户默认值。然后它给出了一个错误
但是当我在 Alamofire 请求函数之外调用它时,它运行得很好。我应该怎么办?
我想把它保存在alamofire success里面但是做不到
用您的代码替换此代码,然后删除应用并再次运行。
required init(coder aDecoder: NSCoder) {
transOBJ = = aDecoder.decodeObject(forKey: "OBJ") as! [JSON]
}
谢谢Tj3n。 JSON 还需要符合NSCoding。仅仅交易是不够的。我在 Transactions NSObject 中为字符串和整数创建了不同的变量,从 JSON 中提取数据,将提取的数据存储在声明的变量中,然后相应地对其进行编码和解码。成功了。
如果还有其他方法,我洗耳恭听。
我正在尝试在用户默认设置中存储自定义 class 但遇到异常
terminating with uncaught exception of type NSException
我的class如下:交易
import Foundation
import SwiftyJSON
class Transactions: NSObject,NSCoding {
var transOBJ = [JSON]()
init(transOBJ:[JSON]) {
self.transOBJ = transOBJ
}
required convenience init(coder aDecoder:NSCoder) {
let obj = aDecoder.decodeObject(forKey: "OBJ") as! [JSON]
self.init(transOBJ: obj)
}
func encode(with aCoder: NSCoder) {
aCoder.encode(transOBJ, forKey: "OBJ")
}
}
异常抛出 aCoder.encode(transOBJ, forKey: "OBJ")
保存用户默认值的代码是:
let trans = [Transactions(transOBJ: self.transactionObjs)]
var userDefaults = UserDefaults.standard
let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: trans)
userDefaults.set(encodedData, forKey: "transactions")
userDefaults.synchronize()
更新 1
我在 Alamofire 请求函数中调用用户默认值。然后它给出了一个错误 但是当我在 Alamofire 请求函数之外调用它时,它运行得很好。我应该怎么办? 我想把它保存在alamofire success里面但是做不到
用您的代码替换此代码,然后删除应用并再次运行。
required init(coder aDecoder: NSCoder) {
transOBJ = = aDecoder.decodeObject(forKey: "OBJ") as! [JSON]
}
谢谢Tj3n。 JSON 还需要符合NSCoding。仅仅交易是不够的。我在 Transactions NSObject 中为字符串和整数创建了不同的变量,从 JSON 中提取数据,将提取的数据存储在声明的变量中,然后相应地对其进行编码和解码。成功了。
如果还有其他方法,我洗耳恭听。