Ios 如何避免在领域数据库中添加具有相同主键的相同数据模型?
我有两个模型之间的一对多关系,Ios 如何避免在领域数据库中添加具有相同主键的相同数据模型?,ios,swift,realm,Ios,Swift,Realm,我有两个模型之间的一对多关系,产品和愿望列表,如下代码所示 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 dynam
产品
和愿望列表
,如下代码所示
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"
}
}
和愿望清单:
class WishList : Object {
@objc dynamic var userID: String = ""
var products = List<Product>()
}
这是领域浏览器中的数据
问题是
当我第一次运行应用程序时,我可以添加,然后删除,然后再将产品添加到愿望列表中,并且领域数据库中的产品数量仍然相同(所有产品都具有唯一的productID)
但是,当我重新启动应用程序,并尝试单击“爱”按钮再次将产品添加到愿望列表时,它会抛出一个错误
'RLMEException',原因:'正在尝试创建类型为的对象
具有现有主键值“a”的“产品”
触发此错误的原因是这行代码userWishList.products.append(selectedProduct)
,将产品添加到WishList
时,它会自动将产品添加到域数据库中。因此,由于我不断添加具有相同productID(主键)的相同产品,它将抛出该错误
因此,我的问题是,如果产品具有相同的productID(主键),如何避免在Product
中添加,最好在将产品添加到愿望列表时使用以下代码行更新领域数据库中的产品:userWishList.products.append(selectedProduct)
您可以检查所选产品的属性hasbeendedtowishlist
,只有在属性为false时才添加它
if loveIconHasBeenFilled {
//your logic to remove already added products
} else if !selectedProduct.hasBeenAddedToWishList { //<--- check if the product already exists in wishlist if not you add it
do {
// add product to wishlist model in realm database
try realm.write {
userWishList.products.append(selectedProduct)
}
} catch {
// error Handling
}
如果loveIconHasBeenFilled{
//删除已添加产品的逻辑
}否则的话!{ /也许您可以考虑创建另一个域对象来保存产品和愿望列表之间的关系
if loveIconHasBeenFilled {
//your logic to remove already added products
} else if !selectedProduct.hasBeenAddedToWishList { //<--- check if the product already exists in wishlist if not you add it
do {
// add product to wishlist model in realm database
try realm.write {
userWishList.products.append(selectedProduct)
}
} catch {
// error Handling
}