Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 对象已被删除或无效。(领域)_Swift_Realm - Fatal编程技术网

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

Swift 对象已被删除或无效。(领域),swift,realm,Swift,Realm,请参阅 我在这两种情况下也遇到了这个错误。 我试图在删除之前找到DBProduct,但它也出现了错误:对象已被删除或无效。这是错的吗?请帮帮我。我在警报视图块中将此方法称为案例2 let realm = try! Realm() try! realm.write { let dbProduct = realm.objectForPrimaryKey(DBProduct.self, key: product.id) if dbProduct != nil { rea

请参阅 我在这两种情况下也遇到了这个错误。 我试图在删除之前找到DBProduct,但它也出现了错误:对象已被删除或无效。这是错的吗?请帮帮我。我在警报视图块中将此方法称为案例2

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

更新:此问题仅在iOS8上发生,在IOS9上没有问题。

通常,只有尝试访问已删除的领域对象的属性,或者明确告知其父领域对象使其无效时,才应引发此错误

正如James所说,您的
product
变量很可能已经失效,在这种情况下,尝试调用
product.id
可能会导致崩溃

如果是这样的话,那么解决这个问题最简单的方法就是避免使用
product
变量,而是直接复制
id
的值。这样,如果对象被删除/无效,您仍然有它的主键,您可以在其中测试它是否仍然存在

另一方面,这段代码当然也可以变得更有效率。没有必要在写事务中执行查询,只有在确实有要删除的对象时才应该打开写事务(写事务非常繁重,因此应该尽量避免)


我希望这有帮助

我认为你的逻辑是错误的。您试图从领域中删除一个已经从领域中删除的对象,但仍然有一个POSO引用它。在没有看到所有代码的情况下,我猜该对象是
product
I重新加载表视图并删除领域数据。但它只在iOS 8上发生,在iOS 9上也可以。我不知道问题出在哪里。我在iOS 9上测试过,没问题。但是,应用程序在iOS 8上崩溃。崩溃错误:对象已被删除或无效。请稍候。您是否按照我的建议执行了操作,并在查询中停止使用
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!)
    }
}