Как правило, эта ошибка должна быть брошена только если вы пытаетесь получить доступ к объекту объекта 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!)
}
}
Я надеюсь, что это помогло!
Я думаю, что у вас есть логика неправильного пути. Вы пытаетесь удалить объект из Realm, который уже удален из Realm, но у вас все еще есть POSO, ссылающийся на него. Не видя всего вашего кода, я бы предположил, что этот объект является «продуктом» –
. Я перезагружаю табличное представление и удаляю данные Realm. Но это происходит только на iOS8 и ОК на iOS 9. Я не понимаю эту проблему. – nangtrung