修改域列表尝试重新创建链接的对象

时间:2017-09-14 09:27:14

标签: swift realm realm-list

我有以下(简化)领域模型:

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)));

堆栈跟踪:

enter image description here

object_schema.name是“EditorialCategoryModel”,它在ProgramSetModel中链接,它本身是从ItemModel链接的。

有没有办法避免此错误并将项目附加到列表中而Realm不会尝试重新创建每个链接对象?谢谢!

0 个答案:

没有答案