Ios 仅当主键唯一时才附加到域列表
我正在我的iOS项目中实现Realm,我想知道是否只有当Ios 仅当主键唯一时才附加到域列表,ios,swift,realm,Ios,Swift,Realm,我正在我的iOS项目中实现Realm,我想知道是否只有当对象的主键是唯一的时,才有办法将对象附加到列表。目前我有一些类似于: let realm = try! Realm() let message = RealmMessage() message.id = 99999 message.desc = "Please Help!" let chatroom = realm.objects(RealmChatRoom.self)[0] try! realm.write { chatroom.
对象的主键是唯一的时,才有办法将对象
附加到列表
。目前我有一些类似于:
let realm = try! Realm()
let message = RealmMessage()
message.id = 99999
message.desc = "Please Help!"
let chatroom = realm.objects(RealmChatRoom.self)[0]
try! realm.write {
chatroom.messages.append(message)
}
try! realm.write {
realm.add(chatRoom, update: .modified)
}
但是,如果消息已在列表中,则此操作将崩溃
我知道可以使用以下方法更新完整的对象:
let realm = try! Realm()
let message = RealmMessage()
message.id = 99999
message.desc = "Please Help!"
let chatroom = realm.objects(RealmChatRoom.self)[0]
try! realm.write {
chatroom.messages.append(message)
}
try! realm.write {
realm.add(chatRoom, update: .modified)
}
但是对于append
,是否存在类似的内容?即,仅在唯一键被覆盖时写入?列表存储对象引用及其元素,并使用消息自动更新。因此,如果chatroom.messages
包含消息
,则无需再次追加该消息。因此,您可以使用此代码更新:
try! realm.write {
realm.add(message, update: .modified)
if !chatroom.messages.contains(message) {
chatroom.messages.append(message)
}
}
主键的可能重复项必须是唯一的。声明主键允许高效地查找和更新对象,并强制每个值的唯一性。设置主键的方式是一个问题-一个解决方案是使用nsuid().UUIDString
分配键。它们将保证独特性并缓解问题。您将知道消息是否已经在列表中,因为您将加载它以进行更改,然后可以通过它的主键进行更新。实际上,您不需要在上面的代码中首先添加消息,只需添加消息就足够了,它会自动添加消息。这不是我要寻找的,尽管我想在不首先检查消息是否包含消息的情况下追加。