请参阅错误:对象已被删除或无效。(领域) 我也遇到了这两种情况的错误。我尝试在删除之前找到 DBProduct,但它也得到了错误:对象已被删除或无效。这是错误的吗?请帮我。我在警报视图块中将此方法称为案例 2。
let realm = try! Realm()
try! realm.write {
let dbProduct = realm.objectForPrimaryKey(DBProduct.self, key: product.id)
if dbProduct != nil {
realm.delete(dbProduct!)
}
}
Run Code Online (Sandbox Code Playgroud)
更新:此问题仅在 iOS8 上发生,在 iOS 9 上没问题。
通常,只有当您尝试访问已删除的 Realm 对象的属性,或者如果您明确告诉其父 Realm 对象无效时,才会抛出该错误。
就像詹姆斯说的那样,很可能你的product变量已经失效,在这种情况下,尝试调用product.id可能会导致崩溃。
如果是这种情况,那么解决此问题的最简单方法是避免使用该product变量,而是直接复制 的值id。这样,如果对象被删除/无效,您仍然可以使用它的主键,您可以在其中测试它是否仍然存在。
附带说明一下,这段代码当然也可以提高一点效率。没有必要在写事务中执行查询,如果确实有要删除的对象,你应该只打开一个写事务(写事务是非常繁重的事情,所以应该尽可能地避免它们)。
let productID = product.id //save a copy of the ID in case 'product' gets deleted.
let realm = try! Realm()
let dbProduct = realm.objectForPrimaryKey(DBProduct.self, key: productID)
if dbProduct != nil {
try! realm.write {
realm.delete(dbProduct!)
}
}
Run Code Online (Sandbox Code Playgroud)
我希望有帮助!
| 归档时间: |
|
| 查看次数: |
8086 次 |
| 最近记录: |