我知道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")
}
答案 0 :(得分:0)
我对你在这里使用的逻辑感到有些困惑。您使用realm.add()
首次向Realm
实例添加新对象。在此之前,在此之前检查它是否invalidated
很可能总是返回false,因为此时它不应该由Realm
支持。
如果它已经由Realm实例支持,那么注意Realm写入事务按顺序发生也很重要。一次只能打开一个,之后每个都会等到当前的一个完成。在这种情况下,self.invalidated
确实是错误的,但是当你在这里打开写入事务时,另一个写入事务可能刚刚删除它。
我的建议是尽可能地尝试依赖Realm来检查对象的已删除状态,而不是依赖于自定义机制。如果已将id
设置为主键,则可以使用realm.objectForPrimaryKey(ObjectType.self, key: id)
快速检查Realm
实例中是否已存在{而不是尝试自行管理单独的列表)。
如果您需要任何额外的说明,请与我们联系。