【问题标题】:Adding a deleted object back to realm fails swift将已删除的对象添加回领域会迅速失败
【发布时间】:2019-06-19 12:40:40
【问题描述】:

我向领域添加了一个对象并且能够删除该对象,但是如果我尝试再次读取该对象,我会收到此错误

由于未捕获的异常“RLMException”而终止应用程序,原因: '试图创建一个类型为 'PropertyImage' 的对象 现有主键值“3”。

键 3 的项目已删除,当我查看 realmDB 时,键 3 的项目不存在。我该如何解决这个问题。

以下是我如何添加到我的数据库以及如何删除

func delete<T: Object>(_ object: T, title: String) where T: Codable {
        do {
            let predicate = NSPredicate(format: "title=%@", title)
            guard let toRemove = realm?.objects(T.self).filter(predicate) else { return}
            try realm?.write {
                realm?.delete(toRemove)
            }
        } catch {
        }
    }

    func create<T: Object>(_ objects: [T]) where T: Codable {
        do {
            try realm?.write {
                realm?.add(objects)
            }
        } catch {
            print(error.localizedDescription)
        }
    }

添加是这样完成的

var property: FeaturedProperties? RealmManager.instance.create(property)

删除是

RealmManager.instance.delete(property, title: property.title!)

【问题讨论】:

  • 你的创建代码在哪里?

标签: swift realm


【解决方案1】:

如果你有一个凌乱的创建,那么这样做以避免相同的主键插入

do { 
    // property to be saved 
    let predicate = NSPredicate(format: "primaryProperty=%d",property.primaryProperty)
    guard let arr = realm?.objects(T.self).filter(predicate) , arr.isEmpty else { print("exists") ; return }    
    // call create here 
} catch {
      print(error)
}

primaryProperty 是模型中的主要值

【讨论】:

  • 创作混乱吗?这段代码在哪里输入?
  • 在致电RealmManager.instance.create(property)之前
  • primaryProperty 哪个是 id?
  • id 是一个 Int
  • 此外,即使在删除后也不允许我添加相同的对象
猜你喜欢
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多