【发布时间】:2021-06-01 19:11:13
【问题描述】:
我有一个“列表”实体,它与带有“标签”的 manny 有关系。我将数据从 json 中保存为一个,如下所示:
func saveData(contex: NSManagedObjectContext) {
listings.forEach() { (data) in
let listingFetch: NSFetchRequest<Listing> = Listing.fetchRequest()
listingFetch.predicate = NSPredicate(format: "id = %@", "\(Int64(data.id))")
do {
let results:[Listing] = try contex.fetch(listingFetch)
if results.count == 0 {
let entity = Listing(context: contex)
entity.id = Int64(data.id)
entity.title = data.title
entity.name = data.name
data.tags.forEach { (tagData) in
let tag = Tag(context: contex)
tag.tagName = (tagData)
tag.toListing = entity
}
data.images.forEach { (galleryData) in
let image = Gallery(context: contex)
image.imageName = galleryData
image.galtolisting = entity
}
try? contex.save()
print ("Insert Listing: ID: \(entity.id); Title: \(String(describing: entity.title)); Tags: \(String(describing: data.tags)); Images: \(String(describing: data.images))")
}
else
{
let entity = results[0]
entity.id = Int64(data.id)
entity.title = data.title
entity.name = data.name
data.tags.forEach { tagData in
let tag = Tag(context: contex)
tag.tagName = tagData
tag.toListing = entity
}
data.images.forEach { galleryData in
let image = Gallery(context: contex)
image.imageName = galleryData
image.galtolisting = entity
}
try? contex.save()
print ("Updated Listing: ID: \(entity.id); Title: \(String(describing: entity.title)); Tags: \(String(describing: data.tags)); Images: \(String(describing: data.images))")
}
} catch let error as NSError {
print("error inserting / updating Listing \(error), \(error.userInfo)")
}
}
}
我遇到的问题是,当我再次获取更新数据时,所有“标签”都是重复的。
“列表”实体约束设置为 id。
【问题讨论】:
-
如果列表已经存在,您可以从 json 中添加所有标签,而不检查它们是否已经存在于该列表对象中。
标签: json swift core-data entity-relationship