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
相关产品推荐
相关产品推荐

