You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NSKeyedUnarchiver解归档MLMultiArray?

解决MLMultiArray归档解码失败的问题

错误原因

解码报错的核心是:安全解码模式下,你仅允许了解码Embedding类,但Embedding内部包含的MLMultiArray未被加入允许的类列表,解码器无法信任该未知类,导致校验失败。

解决方案

修改解码方法,将MLMultiArray.self加入unarchivedArrayOfObjects(ofClasses:)的类数组参数中,明确告知解码器信任该类。

修改后的解码代码

private func loadEmbeddingsData(fileName: String) -> [Embedding]? {
    let filePath = self.getDocumentsDirectory().appendingPathComponent(fileName)
    do {
        let data = try Data(contentsOf: filePath)
        // 新增MLMultiArray到允许解码的类列表
        let embeddings = try NSKeyedUnarchiver.unarchivedArrayOfObjects(ofClasses: [Embedding.self, MLMultiArray.self], from: data) as? [Embedding]
        return embeddings
    } catch {
        print("error is: \(String(describing: error))")
    }
    return nil
}

补充说明

  • MLMultiArray本身已遵循NSSecureCoding协议,无需额外实现编码解码逻辑,可直接加入允许列表。
  • 安全解码要求所有参与归档的自定义类、嵌套系统类都必须被明确指定,否则会触发类校验失败错误。

内容的提问来源于stack exchange,提问作者MazzzyStar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:25:27