![enter image description here](https://i.stack.imgur.com/Dhzh9.png)
У меня есть отношения один ко многим между двумя моделями, Product
и WishList
, как в коде ниже
class Product : Object {
@objc dynamic var productID : String = ""
@objc dynamic var name : String = ""
@objc dynamic var unitPrice: Double = 0.0
@objc dynamic var imagePath : String = ""
@objc dynamic var quantity = 0
@objc dynamic var hasBeenAddedToWishList : Bool = false
var parentCategory = LinkingObjects(fromType: WishList.self, property: "products")
convenience init(productID : String, name: String, unitPrice: Double, imagePath: String, quantity: Int = 1, hasBeenAddedToWishList: Bool = false) {
self.init()
self.productID = productID
self.name = name
self.unitPrice = unitPrice
self.imagePath = imagePath
self.quantity = quantity
self.hasBeenAddedToWishList = hasBeenAddedToWishList
}
override static func primaryKey() -> String? {
return "productID"
}
}
и WishList:
class WishList : Object {
@objc dynamic var userID: String = ""
var products = List<Product>()
}
Я пытаюсь добавить или удалить товар в WishList, используя код ниже, когда нажата кнопка «Любовь» на изображении выше:
// 1. get the wishlist based on UserID
let allWishList = realm.objects(WishList.self)
let theWishList = allWishList.filter("userID CONTAINS[cd] %@", userID).first
guard let userWishList = theWishList else {return}
// 2. modify Wishlist data in Realm.
if loveIconHasBeenFilled {
guard let index = userWishList.products.index(where: {$0.productID == selectedProduct.productID}) else {return}
do {
// remove data from realm database
try realm.write {
userWishList.products.remove(at: index)
}
} catch {
// error Handling
}
} else {
do {
// add product to wishlist model in realm database
try realm.write {
userWishList.products.append(selectedProduct)
}
} catch {
// error Handling
}
}
и вот данные в Realm Browser![enter image description here](https://i.stack.imgur.com/EkR0T.png)
![enter image description here](https://i.stack.imgur.com/AyvoD.png)
, и проблема заключается в том, что ....
при запуске приложения дляв первый раз я могу добавить, а затем удалить, а затем снова добавить продукт в список пожеланий, и номер продукта в базе данных области останется прежним (все имеют уникальный productID)
, но когда яперезапустите приложение и попробуйте нажать эту кнопку «любовь», чтобы снова добавить продукт в список желаний. Выдается ошибка
«RLMException», причина: «Попытка создать объект типа« Продукт »с помощьюсуществующее значение первичного ключа 'a'
эта ошибка вызвана из-за этой строки кода userWishList.products.append(selectedProduct)
,при добавлении продукта в WishList
он автоматически добавляет Product
в базу данных области.поэтому, поскольку я продолжаю добавлять один и тот же продукт, который имеет один и тот же productID (первичный ключ), он выдаст эту ошибку.
поэтому мой вопрос состоит в том, как избежать добавления в Product
, если он имеет тот же productID (первичный ключ), было бы лучше, если бы я мог просто обновить продукт в базе данных области при добавлении продукта в список желаний, используя следующую строку кода: userWishList.products.append(selectedProduct)