gpt4 book ai didi

swift - 对象已被删除或失效。 ( Realm )

转载 作者:可可西里 更新时间:2023-11-01 00:51:23 24 4
gpt4 key购买 nike

请引用Error: Object has been deleted or invalidated. (Realm)我在这两种情况下也遇到了这个错误。我尝试在删除之前找到 DBProduct,但它也出现错误:对象已被删除或无效。这是错误的吗?请帮我。我在警报 View block 中将此方法称为案例 2。

let realm = try! Realm()
try! realm.write {
let dbProduct = realm.objectForPrimaryKey(DBProduct.self, key: product.id)
if dbProduct != nil {
realm.delete(dbProduct!)
}
}

更新:此问题仅在 iOS8 上出现,在 iOS 9 上正常。

最佳答案

通常,只有当您尝试访问已删除的 Realm 对象的属性,或者您明确告诉其父 Realm 对象无效时,才会抛出该错误。

正如 James 所说,您的 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!)
}
}

希望对您有所帮助!

关于swift - 对象已被删除或失效。 ( Realm ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37458955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com