即使无效= = false,Realm也会使错误失效

时间:2016-09-05 16:47:15

标签: ios swift realm

我知道Realm可以很容易地使用无效对象崩溃...但是,在尝试使用给定对象之前,我尝试捕获这种状态,它通常可以正常工作。 但是,对于我的Request对象,有时我会在realm.add(self)上使用"在向Realm添加已删除或无效的对象时出现崩溃"。

我不确定无效是否为假阴性,或者我的" custom"验证对象的方法已被删除是错误的(我只是在实际删除之前在共享字典中添加对象的id)。

我有点卡在那个上,它会导致我的应用程序崩溃:(

if self.invalidated == false{
     if let deleted = RequestHelper.sharedHelper.deletedRequests[id] where deleted == true{
          return
      }
      let realm = try! Realm()
      do{
        try realm.write{
            realm.add(self)
         }
        }catch{}
        id = self.id
    }
    else{
        print("realm invalidation")
    }

1 个答案:

答案 0 :(得分:0)

我对你在这里使用的逻辑感到有些困惑。您使用realm.add()首次向Realm实例添加新对象。在此之前,在此之前检查它是否invalidated很可能总是返回false,因为此时它不应该由Realm支持。

如果它已经由Realm实例支持,那么注意Realm写入事务按顺序发生也很重要。一次只能打开一个,之后每个都会等到当前的一个完成。在这种情况下,self.invalidated确实是错误的,但是当你在这里打开写入事务时,另一个写入事务可能刚刚删除它。

我的建议是尽可能地尝试依赖Realm来检查对象的已删除状态,而不是依赖于自定义机制。如果已将id设置为主键,则可以使用realm.objectForPrimaryKey(ObjectType.self, key: id)快速检查Realm实例中是否已存在{而不是尝试自行管理单独的列表)。

如果您需要任何额外的说明,请与我们联系。