如何轻松删除领域中的所有对象
Posted
技术标签:
【中文标题】如何轻松删除领域中的所有对象【英文标题】:How can I easily delete all objects in a Realm 【发布时间】:2014-11-28 21:49:31 【问题描述】:我可以选择进行迁移,但我更愿意删除我的 defaultRealm() 中的所有内容。我怎样才能轻松做到这一点?
realm.deleteObject(object)
是 .deleteObjects 的唯一功能。
我尝试了以下代码:
方法一
realm.deleteObjects(RLMObject.objectsInRealm(realm, withPredicate: NSPredicate(value: true)))
方法二
realm.deleteObjects(Dog.allObjectsInRealm(realm))
realm.deleteObjects(Person.allObjectsInRealm(realm))
realm.deleteObjects(Goal.allObjectsInRealm(realm))
realm.deleteObjects(Goals.allObjectsInRealm(realm))
两者都未能阻止迁移异常。
【问题讨论】:
嘿队长,你是在ios还是android上做这个?这些方法确实会删除所有对象,但您仍然会遇到迁移问题。 在模拟器/手机上执行此操作的快速方法是从主屏幕删除应用程序 iOS!在哪里可以了解有关迁移的更多信息? realm.io/docs/cocoa/0.86.0/#migrations 【参考方案1】:使用deleteAll()
:
let realm = try! Realm()
try! realm.write
realm.deleteAll()
【讨论】:
谢谢,你们应该把它添加到文档中! 这在 Realm 的 API 文档:realm.io/docs/objc/latest/api/Classes/RLMRealm.html#//api/name/… 中有记录,比在 realm.io/docs/objc/latest 的 Realm 入门文档更全面。 我认为 API 发生了一些变化。对我来说,使用RealmSwift
this 删除所有对象:try! realm.write realm.deleteAll()
@JohnB。更新了答案。
如果那个时候realm通知还在运行,直接使用realm.deleteAll()可能会导致crash【参考方案2】:
截至v0.87.0,RLRealm
上有一个deleteAllObjects
方法将清除所有对象的领域。
【讨论】:
@cesarferreira 我建议你向 Realm (github.com/realm/realm-cocoa/issues) 提出问题。 @cesarferreira 你能在github问题中分享代码吗? 分享github问题是什么意思? 如果你可以创建一个 github 问题,你可以复制并粘贴一些代码来显示它不适合你的地方【参考方案3】:Realm 世界中的事情已经发生了变化 - 万一现在有人遇到这种情况,可以设置一个属性:
Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true
然后它会像宣传的那样做。 (顺便说一句:上面的很多语法已经改变,以防你尝试任何其他方法)
Github 公关https://github.com/realm/realm-cocoa/pull/3463
【讨论】:
【参考方案4】:考虑到问题是关于删除整个存储而不是迁移它,我认为删除 Realm DB 文件是有效的答案。
这是一个快速的 Swift 代码(从 Swift 2.1 和 Realm 0.96.2 开始):
if let path = Realm.Configuration.defaultConfiguration.path
try! NSFileManager().removeItemAtPath(path)
如果在加载存储时发生迁移错误,我会在应用程序的 DEBUG 版本中使用此代码,然后我重新创建存储。在开发过程中,架构可能会发生很大变化,因此一直为迁移而烦恼。
【讨论】:
以上是关于如何轻松删除领域中的所有对象的主要内容,如果未能解决你的问题,请参考以下文章
如何清除 NSManagedObjectContext 中的所有对象?