Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何避免在领域数据库中添加具有相同主键的相同数据模型?_Ios_Swift_Realm - Fatal编程技术网

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
  }