使用 Realm 尝试删除一个对象会引发异常("在写入事务中只能将对象添加到 Realm 数据库...")



我试图删除领域中的1个对象,但无法执行此方法。有什么问题吗?

var realm = RLMRealm.defaultRealm() 
realm.beginWriteTransaction()
var soo = Sample3()
soo.sampleKey = "edit1"
soo.id = 0
realm.deleteObject(soo)
realm.commitWriteTransaction()
println("deleted")

它有这个错误。。。

swiftRealm[50559:847671] *** Terminating app due to uncaught exception 'RLMException', reason: 'Can only add an object to a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first.'

我有点困惑,你是在尝试addObject还是deleteObject?我看到你创建了一个Sample3对象,我想它是一个RLMO对象,但IMHO你只在你想把object添加到Realm时创建一个新的RLMO对象。

如果你想从Realm中删除一个对象,你应该先从Realm获取对象,然后删除它

Sample3 *obj = [Sample3 objectsWithPredicate:[NSPredicate predicateWithFormat:@"sampleKey = %@ AND id = %d", @"edit1", 0]][0]
[realm deleteObject(obj)]

对不起,我不熟悉Swift的语法,所以上面在Obj-c中。希望能有所帮助。

Evan Chu是正确的,您正在创建一个新对象,然后要求在将其添加到Realm之前将其删除。

您首先需要查询要删除的对象(假设它已经保存在领域中)即:

var objectToDelete = Sample3.objectsWhere("id == 0")

然后你可以删除这个对象

realm.beginWriteTransaction
realm.deleteObject(objectToDelete)
realm.commitWriteTransaction

我的代码:

var hello   =   Sample3.objectsWhere("id = 0") // maybe: Sample3.objectsWhere("id = '0'") or        Sample3.objectsWhere("sampleKey = 'edit1'")
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
realm.deleteObject(hello.firstObject() as RLMObject)
realm.commitWriteTransaction()

设置时:var hello = Sample3.objectsWhere("id == 0")。你好是RLMResults。它不是RLMObject,则不能删除此对象。您应该像hello.firstObject()一样删除RLMO对象更多信息:http://realm.io/docs/cocoa/0.87.1/api/Classes/RLMResults.html#//api/name/realm

最新更新