2017-03-31 19 views
1

我在我的第一步使用领域移动数据库,我想知道是否有一种方法来处理尝试添加对象与之前插入的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-捕捉处理。

回答

2

尝试添加一个已存在的主键的对象被归类为程序员错误(即滥用API),因此无法在运行时处理此错误。

在你的情况应该不是试图类别添加到领域之前检查的对象与主键存在:

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 
} 
+0

这是它周围的我的其他猜测,但我想,以确保如果我以正确的方式使用API​​。我仔细检查文档,但没有任何明确的暗示。 Thxs! – allekoss