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

Core Data中NSObject类型状态列表如何转换为Int值获取对应状态文本

你存储时将[Int]数组桥接为NSArray后转为NSObject存入Core Data,取出的account.statuses本质是NSArray类型,之前使用Array(arrayLiteral: account.statuses)会把整个数组当成单个元素塞入新数组,是导致类型转换失败的核心原因。

修复代码

首先对取出的statuses做安全类型转换,再遍历即可:

// 先做类型转换,兜底处理转换失败的场景
guard let statusIndexList = account.statuses as? [Int] else {
    return AnyView(EmptyView())
}

// 直接遍历转换后的Int数组
ForEach(statusIndexList, id: \.self) { index in
    // 增加下标越界判断,避免异常索引导致崩溃
    if status.indices.contains(index) {
        Text(status[index])
    } else {
        Text("未知状态")
    }
}

优化建议

你可以直接在Core Data模型编辑器中将statuses属性的类型设置为Transformable,并在CDAccount的自定义类中直接声明为[Int]类型:

@NSManaged public var statuses: [Int]?

后续存储时无需手动转NSObject,直接赋值account.statuses = statusIndexEdits即可,取出时也不需要额外做类型转换,Core Data会自动处理序列化和反序列化逻辑。

内容的提问来源于stack exchange,提问作者Mert Köksal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:27:02