对象已被删除或无效。 (领域)

时间:2016-05-26 11:00:48

标签: swift realm

请参阅Error: Object has been deleted or invalidated. (Realm) 我也遇到了这个错误。 我尝试在删除之前找到DBProduct,但它也得到错误:对象已被删除或无效。这是错的吗?请帮我。我在Alert视图块中将此方法称为案例2。

sudo ln -s [result of which pry] /usr/bin/pry

更新:此问题仅在iOS8上发生,并且在iOS 9上正常。

1 个答案:

答案 0 :(得分:4)

通常,只有在尝试访问已删除的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!)
    }
}

我希望有所帮助!