arrays - 将字符串数组保存到 CoreData

标签 arrays swift core-data

我正在尝试将 6 个字符串的数组保存到 CoreData,如下所示:

     let imageUrls = ["image-url....", "image-url....", ..., "image-url"]

我已经尝试了 How to save Array to CoreData? 中所述的所有方法在Best practice? - Array/Dictionary as a Core Data Entity Attribute没有成功。

这是我正在尝试做的方法。

在我的 .xcdatamodeld 中,我声明: imageUrl 作为 Transformable,请参阅链接中的图片(无法将其附加到帖子中,对此我深表歉意!):https://drive.google.com/file/d/1VJey55oD9KhOy1KDy59h8PweMMQnaK2-/view?usp=sharing

在我的 NSManagedObject 类中有

    @objc(Entity)
    public class Entity: NSManagedObject {
    @NSManaged public var imageUrls: [String]?
    ....

这是我在将实体保存到 CoreData 之前创建实体的方式:

    entity.imageUrls = ["test", "test", "test"]

当我尝试获取 imageUrls 时,获取的 entity.imageUrls 等于 nil。我不明白这一点。预期结果与我保存到 CoreData 的数组相同。

由 Joakim Danielson 回答

最佳答案

我的建议是将数组编码/解码为 JSON 并使用计算属性。从 Swift 的角度来看,这可能比将数组桥接到 Objective-C 运行时并使用更重的 NSCodingtransformable 属性更有效。

@NSManaged public var imageUrls: String

var urls : [String] {
    get {
        let data = Data(imageUrls.utf8)
        return (try? JSONDecoder().decode([String].self, from: data)) ?? []
    }
    set {
        guard let data = try? JSONEncoder().encode(newValue),
            let string = String(data: data, encoding: .utf8) else { imageUrls = "" }
        imageUrls = string
    }
}

另一个好处是 JSON 字符串是可搜索的

关于arrays - 将字符串数组保存到 CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703836/

相关文章:

arrays - 将假定等级实体写入文件

swift - 如何强制将旧版本iOS应用程序替换为AppStore上可用的新版本

ios - SKAction 暂停播放声音循环

ios - 核心数据 - 检查 NSSet 中是否存在 nsmanagedobjectID

objective-c - NSUndoManager 会撤消后台发生的更改吗?

python - 在 for 循环内删除 np 数组中的行

javascript - 直接从 AngularJS 中的嵌套数组获取数据

arrays - addObjectsFromArray 到现有数组的开头

ios - 使用 CoreData 保存包含字典的数组

javascript - 如何在javascript中向数组添加新对象(键值对)?