使用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()
- WKWebView的WKSelectionGranularityCharacter选项在iOS 9中被破坏
- 如何从命令行执行iOS应用程序validation
- Swift 2.0迁移错误
- 在cocos2d中获取CCSprite的绝对位置
- 无法使用Swift中的NSPredicate查询日期
- UIAppearance不会对以编程方式创build的UILabels生效
- 使用Flutter进行跨平台移动应用程序开发— Xamarin — React Native:以性能为中心的比较
- Apple Watch,WatchKit Extension和主要应用程序
- Firebase SDK,离线数据存储,可select在以后同步