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 的数组相同。
乔金·丹尼尔森回答
我的建议是将数组编码/解码为 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 字符串是可搜索的
检查下面的附件以了解“.xcdatamodelId”文件中的声明。之后在 CoreDataProperties.swift 文件中声明以下行
@NSManaged public var thumbnail: [String]?
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5277 次 |
最近记录: |