我有一个要从磁盘读取的JSON文件
这是文件的结构:
[
{
"name": "3X",
"priority": 33
},
{
"name": "4X",
"priority": 32
}
]
我正在将其解码为名为Test
的类>
class TestClass: NSObject, Codable { enum CodingKeys: String, CodingKey { case name, priority } let name:String let priority:Int var optional:String? = nil var problem:String = "eli" init(name:String, priority:Int, optional:String? = nil, problem:String) { self.name = name self.priority = priority self.optional = optional self.problem = problem super.init() } }
这是我用来解码文件的代码
if let path = Bundle.main.path(forResource: "test", ofType: "json") { do { let jsonData = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) let testObjects = try JSONDecoder().decode([TestClass].self, from: jsonData) let data = try! NSKeyedArchiver.archivedData(withRootObject: testObjects, requiringSecureCoding: false) UserDefaults.standard.set(data, forKey: "test_objects") } catch { // error in parsing json } }
解码后,我尝试将阵列保存到磁盘,将其转换为NSData以进行保存,但是
NSKeyedArchiver.archivedData
失败,并出现以下错误:
{NSDebugDescription=Caught exception during archival: -[BugTesting.TestClass encodeWithCoder:]: unrecognized selector sent to instance 0x600002119ac0
对我来说,这看起来很奇怪,因为我符合
Codable
。
任何帮助将不胜感激。
我有一个要从磁盘读取的JSON文件,这是文件的结构:[{“名称”:“ 3X”,“优先级”:33},{“名称”:“ 4X”,“优先级: 32}]我正在将其解码为类...
如果要对此进行编码,我可能会建议PropertyListEncoder
。然后,您无需引入与NSObject
相关联的NSCoding
(也无需引入NSSecureCoding
/ NSKeyedArchiver
插入):