我有以下(简化)领域模型:
final class Item: Object {
@objc dynamic var identifier: String = ""
@objc dynamic var programSet: ProgramSet?
override static func primaryKey() -> String? {
return "identifier"
}
}
final class ProgramSet: Object {
@objc dynamic var identifier: String = ""
@objc dynamic var editorialCategory: EditorialCategory?
override static func primaryKey() -> String? {
return "identifier"
}
}
final public class EditorialCategory: Object {
@objc dynamic var identifier: String = ""
override public static func primaryKey() -> String? {
return "identifier"
}
}
final class Playlist: Object {
@objc dynamic var id = UUID().uuidString
@objc dynamic var name = ""
@objc dynamic var created = Date()
var items = List<Item>()
override static func primaryKey() -> String? {
return "id"
}
}
当用户将项目添加到播放列表时,我尝试将ItemModel附加到Playlist.items列表:
try realm.write {
playlistToModify.items.append(item)
}
我的问题是,Items可能共享相同的EditorialCategory,因此它可能已经存在于数据库中。当我通过Realm.add(_:update :)方法添加其他项时,如果存在具有相同主键的链接对象,Realm将不会尝试重新创建链接对象。
List.append(_ :)方法似乎强制在调用时重新创建ItemModel的链接对象。该应用程序在object_accessor.hpp
:
throw std::logic_error(util::format("
Attempting to create an object of type '%1' with an existing primary key value '%2'.",
object_schema.name, ctx.print(*primary_value)));
堆栈跟踪:
object_schema.name是“EditorialCategoryModel”,它在ProgramSetModel中链接,它本身是从ItemModel链接的。
有没有办法避免此错误并将项目附加到列表中而Realm不会尝试重新创建每个链接对象?谢谢!