Swift Realm:使用相同的主键添加新对象时如何处理错误?

问题描述

我在项目中使用RealmSwift。 (我是新来的领域) 当我想使用相同的主键添加新对象时,我的应用因以下错误而崩溃:

尝试使用现有的主键值创建“卡”类型的对象。

我如何处理该错误而不会崩溃。 这是我的模型代码

class Card: Object,Decodable {

    @objc dynamic var pan           = ""
    @objc dynamic var title         = ""

    override class func primaryKey() -> String? {
        return CodingKeys.pan.stringValue
    }

    private enum CodingKeys: CodingKey {
        case pan
        case title
    }

    required convenience init(from decoder: Decoder) throws {
        self.init()
        let values = try decoder.container(keyedBy: CodingKeys.self)
    
        self.pan        = try values.decode(String.self,forKey: .pan)
        self.title      = ""
    }
}

这是我的数据库管理器代码

class DatabaseRequest {

    func addCard(_ card: Card) -> Bool {
    
        let realm = try! Realm()
        do {
            try realm.write {
                realm.add(card)
            }
            return true
        } catch let error as NSError {
            print(error)
            return false
        }
    }
}

在将其添加数据库之前,我一直发现存在一些解决方案,例如具有相同主键的check对象。

为什么这部分代码从未执行过?用途是什么?

    } catch let error as NSError {
        print(error)
        return false
    }

解决方法

默认情况下,update属性为.error,这意味着当您尝试创建或添加具有相同主键的对象时会出现错误。

为防止这种情况,只需将update属性设置为.modifed.all

realm.add(card,update: .all)