我在使用 Realm Mobile Database 的第一步中,我想知道是否有办法处理因尝试添加具有相同功能的对象而导致的错误find*()
作为之前插入的primaryKey
,导致以下Can't create object with existing primary key value
。
以下是我的摘要:
class CategoryRLM: Object {
dynamic var name: String = ""
dynamic var desc: String = ""
override static func primaryKey() -> String? {
return "name"
}
}
static func addCategory(category: CategoryRLM) -> Bool {
let realm = try! Realm()
do {
try realm.write {
realm.add(category)
}
return true
}
catch let error {
print(error)
return false
}
}
使用上一个功能:
if !CategoryRLM.addCategory(category: newCategory) {
// There was an error while adding the object
}
事情是,错误并没有被do-catch处理。
答案 0 :(得分:2)
尝试添加具有已存在的主键的对象被归类为程序员错误(即错误使用API),因此无法在运行时处理此错误。
在您的情况下,您应该在尝试将类别添加到Realm之前检查是否存在具有该主键的对象:
static func addCategory(category: CategoryRLM) -> Bool {
let realm = try! Realm()
if let existingCategory = realm.object(ofType: CategoryRLM.self, forPrimaryKey: category.name) {
return false
}
try realm.write! {
realm.add(category)
}
return true
}