1
我有一個狀態屬性的用戶類,我想將其存儲到NSUserDefault這就需要先進行編碼的用戶類別。
User類代碼更新版本
public class User: NSObject, NSCoding {
override init() {}
var status: Status = .unKnow
required convenience public init(coder aDecoder: NSCoder) {
self.init()
self.status = aDecoder.decodeObject(forKey: "UserStatus") as? Status ?? .unKnow
}
public func encode(with aCoder: NSCoder) {
aCoder.encode(self.status, forKey: "UserStatus")
}
public func updatePersistentData() {
let userDefault = UserDefaults.standard
/// stuck at this line
let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: self)
userDefault.set(encodedData, forKey: "User")
userDefault.synchronize()
}
}
我的嵌套枚舉
enum Status {
/// is Login status
case isLogin(style: LoginStatus)
/// is register
case isRegister(style: RegisterStatus)
/// is fetch user info
case isGetUserInfo(style: GetUserInfoStatus)
/// nonabove
case unKnow
}
enum LoginStatus: Int {
case a
case b
case c
case d
}
enum RegisterStatus: Int {
case a
case b
case c
case d
}
enum GetUserInfoStatus: Int {
case a
case b
case c
case d
}
我發現this,並理解我需要枚舉轉換爲原始值。它似乎需要使用字符串樣式或Int樣式等的正常枚舉。
我運行代碼,錯誤消息
HJC[2371:403228] -[_SwiftValue encodeWithCoder:]: unrecognized selector sent to instance 0x7f940e6bec30
HJC[2371:403228] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_SwiftValue encodeWithCoder:]: unrecognized selector sent to instance 0x7f940e6bec30'
感謝您的答覆,但我仍然有錯誤'終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:' - [_ SwiftValue encodeWithCoder:]:無法識別的選擇器發送到實例0x7f940e6bec30''在這個方法** let encodedData:Data = NSKeyedArch iver.archivedData(withRootObject:self)**這是寫在用戶類內 –
@StephenChen我從你的錯誤中注意到你仍然在使用'func encodeWithCoder(aCoder:NSCoder)'而不是'public func encode(with aCoder:NSCoder) '。是這種情況還是這是你以前沒有得到的新錯誤? – Prientus
@Prientus對不起,我打錯了。感謝您的通知,在我的代碼中,我確實使用了'公共func編碼(使用代碼:NSCoder)' –