将字符串数组保存到 CoreData

Cod*_*den 5 arrays core-data swift

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

     let imageUrls = ["image-url....", "image-url....", ..., "image-url"]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了如何将数组保存到 CoreData 中所述的所有方法最佳实践中?- 数组/字典作为核心数据实体属性没有成功。

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

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

在我的 NSManagedObject 类中,我有

    @objc(Entity)
    public class Entity: NSManagedObject {
    @NSManaged public var imageUrls: [String]?
    ....
Run Code Online (Sandbox Code Playgroud)

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

    entity.imageUrls = ["test", "test", "test"]
Run Code Online (Sandbox Code Playgroud)

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

乔金·丹尼尔森回答

vad*_*ian 7

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

@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
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Paw*_*mar 5

检查下面的附件以了解“.xcdatamodelId”文件中的声明。之后在 CoreDataProperties.swift 文件中声明以下行

@NSManaged public var thumbnail: [String]?
Run Code Online (Sandbox Code Playgroud)

现在,我们可以将字符串数组初始化为缩略图变量。xcdatamodelID 文件中的声明变量

  • 为什么是 Array<Any> 而不是 Array<String>? (2认同)
  • 另外,将“NSSecureUnarchiveFromData”设置为“值转换器”(它已重命名为“转换器”)。否则,您可能会收到此运行时警告:“'NSKeyedUnarchiveFromData' 不应用于取消归档,并将在未来版本中删除” (2认同)

Vin*_*cob -6

以下是我们可以存储的数据类型。

在此输入图像描述

您无法存储数组数据。您需要转换为逗号分隔的字符串。然后尝试将其保存到 coredata 中。当您获取时,您可以将其转换为array.