swift - Swift 3 中的 NSCoding - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : '-[AppName. 用户encodeWithCoder:]

标签 swift swift3 nscoding nskeyedarchiver

我在实现 NSCoding 时遇到问题。这是我的用户类代码:

public class User: NSCoder {
...

NSCoding 方法:

解码器:

required public init(coder aDecoder: NSCoder) {
    self.deviceToken = aDecoder.decodeObject(forKey: kUserDeviceTokenKey) as? String
    self.postalCode = aDecoder.decodeObject(forKey:kUserPostalCodeKey) as? String
    self.latitude = aDecoder.decodeObject(forKey:kUserLatitudeKey) as? Float
    self.views = aDecoder.decodeObject(forKey:kUserViewsKey) as? Int
...

编码器:

func encode(with aCoder: NSCoder) {
    aCoder.encode(deviceToken, forKey: kUserDeviceTokenKey)
    aCoder.encode(postalCode, forKey: kUserPostalCodeKey)
    aCoder.encode(latitude, forKey: kUserLatitudeKey)
    aCoder.encode(views, forKey: kUserViewsKey)
...

保存和加载方法:

public func save(user : User){
    let encodedUser = NSKeyedArchiver.archivedData(withRootObject: user)
    UserDefaults.standard.set(encodedUser, forKey: kUserLogedKey)
}

public func getUserLoged()  -> User?{
    if let userData = UserDefaults.standard.object(forKey: kUserLogedKey),
        let user = NSKeyedUnarchiver.unarchiveObject(with: userData as! Data) as? User{
        print("DICT USER LOGED: \(user.dictionaryRepresentation())")
        return user
    }else {
        return nil
    }
}

我收到以下错误:

-[App.User encodeWithCoder:]: unrecognized selector sent to instance 0x101946e00
2017-03-05 14:22:47.540798 App[2642:750699] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[.User encodeWithCoder:]: unrecognized selector sent to instance 0x101946e00'

最佳答案

感谢@vadian 提供解决方案:

我替换:公共(public)类用户:NSCoder 作者:公共(public)类用户:NSObject、NSCoding

关于swift - Swift 3 中的 NSCoding - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : '-[AppName. 用户encodeWithCoder:],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42608969/

相关文章:

swift - 无法在 Swift 中使用 CGRect 类型的参数调用 + 错误

swift - Firebase - 为什么不搜索在我的应用程序中工作的用户? (当用户输入两个字母时更新搜索 Controller )

ios - 在 Swift 中使用 SVProgressHUD 显示进度

ios - 相当于只调用一次的 "viewDidLayoutSubviews"?

swift - 无法使 NSTableView 在 Swift3 中工作

ios - NSCoding - 将数组保存到文件或 nsdefaults

swift - NS编码: Found nil unwrapping an Optional value

ios - 缓存 Firebase 视频 url 时 URLSession 移动缓慢

Swift Firebase 在闭包内发送数据

swift - 无法在 Swift 中保存 Bool