我有一个名为Rides的班级,里面有一个预订列表。当我在列表中添加新的预订时,它会附加相同的预订并创建“重复”。见附图。
这是添加条目的代码:
let reservation = RealmReservation(json: json["reservation"])
realm.add(reservation, update: true)
rides.reservations.append(reservation)
该课程的代码如下:
class RealmReservation: Object {
dynamic var id: Int = 0
override static func primaryKey() -> String {
return "id"
}
end
如何确保列表中的唯一性?
谢谢!
答案 0 :(得分:3)
乍一看,我可以看到三种方法来解决这个问题:
1)如果您的班级可以成为Hashable,您可以使用集合而不是列表。一套将为您管理唯一性。
rides.reservations.insert(reservation)
2)您也可以使用字典而不是列表(或者除此之外)。
rides.reservations[reservation.primaryKey()] = reservation
3)您可以在追加到列表之前测试现有条目:
if !rides.reservations.contains({ $0.primaryKey() == reservation.primaryKey() })
{ rides.reservations.append(reservation) }
答案 1 :(得分:0)
正在附加相同预留的新实例,因为每次主键属性id
值都不同。
由于您已将该属性标记为您的Realm对象的主键,因此只要id
的值保持不变,请将add(_: update:)
调用update
并设置为true
将更新您之前的对象,而不是添加新对象。
我的建议是检查生成id
的位置,并确保它对于相同的预订保持一致。
如果您需要进一步说明,请与我们联系! :)