我正在尝试将 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 运行时并使用更重的 NSCoding
的 transformable
属性更有效。
@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/