Swift3 Can';t使用现有主键值创建对象

Swift3 Can';t使用现有主键值创建对象,swift3,realm,Swift3,Realm,我正在使用Realm Mobile Database的第一步中,我想知道是否有办法处理由于尝试添加一个与先前插入的对象具有相同主键的对象而导致的错误,导致以下无法创建具有现有主键值的对象 以下是我的片段: class CategoryRLM: Object { dynamic var name: String = "" dynamic var desc: String = "" override static func primaryKey() -> String? {

我正在使用Realm Mobile Database的第一步中,我想知道是否有办法处理由于尝试添加一个与先前插入的对象具有相同
主键的对象而导致的错误,导致以下
无法创建具有现有主键值的对象

以下是我的片段:

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无法处理该错误。

尝试添加主键已存在的对象被归类为程序员错误(即滥用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
}

这是我的另一个猜测,但我想确定我是否以正确的方式使用了API。我仔细检查了文件,但没有任何明确的提示。Thxs!!!