问题描述
我在项目中使用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)