使用Realm尝试删除一个对象会引发exception(’只能在写入事务中向对象添加对象…’)

我试图删除领域中的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对象,我想这是一个RLMObject,但是当你想将addObject添加到Realm时,你只需创建一个新的RLMObject。

如果要从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,因此您无法删除此对象。 您应该删除RLMObject,如hello.firstObject()更多信息: http : hello.firstObject()