无法使用现有主键值创建对象

时间:2017-03-31 23:18:02

标签: swift3 realm

我在使用 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处理。

1 个答案:

答案 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
}