我浏览了整个SO,但仍然没有答案。我的应用程序报告此问题:
致命异常:NSInvalidUnarchiveOperationException
*** -[NSKeyedUnarchiverdecodeObjectForKey:]: 无法解码密钥 (NS.objects) 类 (App_Title.Products) 的对象;这
类可以在源代码或未链接的库中定义
我已经在 #unarchiveObject 之前做了 NSKeyedUnarchiver.setClass :
func loadProducts() -> [Products]? {
NSKeyedUnarchiver.setClass(Products.self, forClassName: "Products")
let unarchivedData = NSKeyedUnarchiver.unarchiveObject(withFile: Products.ArchiveURL.path)
我的产品类以 @Objc 开头:
import Foundation
@objc(Products)
class Products: NSObject, Codable, NSCoding { ... }
添加上面的两行似乎对人们有帮助并没有给我带来任何运气。在他们之前和之后都是同样的行为。我个人永远无法自己重现这个问题。
在开发过程中,我非常密切地关注应用程序指南坚持 https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/PersistData.html并多次审阅。
就在 NSKeyedArchiver 之前,我检查文件是否存在:
let filePath = Products.ArchiveURL.path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
这里有一些屏幕截图中的附加信息。
我唯一能找到真正的异常描述的地方是 Firebase Crashlytics:
Xcode Organizer 的 Crash 选项卡下的屏幕截图:
这导致了代码中的这一行:
NSKeyedUnarchiver.setClass(Products.self, forClassName: "Products")
let unarchivedData = NSKeyedUnarchiver.unarchiveObject(withFile: Products.ArchiveURL.path)
带有 @Objc 注释的产品类。