如何轻松删除Realm中的所有对象

40

我可以选择进行迁移,但我更倾向于删除我的defaultRealm()中的所有内容。有什么简单的方法可以做到这一点吗?


realm.deleteObject(object)

除了 .deleteObjects 之外,它是唯一的功能。

我尝试了以下代码:

方法1

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上做这个?那些方法确实会删除所有对象,但你仍然会遇到迁移问题。 - yoshyosh
3
在模拟器/手机上快速完成此操作的方法是,只需从主屏幕中删除应用程序。 - yoshyosh
iOS!我在哪里可以了解更多关于迁移的内容? - CaptainCOOLGUY
1
http://realm.io/docs/cocoa/0.86.0/#migrations - yoshyosh
4个回答

114

使用deleteAll()函数:

let realm = try! Realm()
try! realm.write {
    realm.deleteAll()
}

1
谢谢,你们应该把这个加入到文档中! - CaptainCOOLGUY
1
这在 Realm 的 API 文档中有详细说明:https://realm.io/docs/objc/latest/api/Classes/RLMRealm.html#//api/name/deleteAllObjects,该文档比 Realm 的入门文档 https://realm.io/docs/objc/latest 更加全面。 - jpsim
4
我认为API有所改变。对于我来说,要使用 RealmSwift 删除所有对象,可以这样写:try! realm.write { realm.deleteAll() } - John B.
@JohnB。回答已更新。 - Ryan Brodie
1
如果 Realm 通知仍在运行,那么直接使用 realm.deleteAll() 可能会导致崩溃。 - atom2ueki

16

1
@cesarferreira 我建议你与 Realm (https://github.com/realm/realm-cocoa/issues)提交一个问题报告。 - Michael McGuire
@cesarferreira 你能在 GitHub 的 issues 中分享代码吗? - yoshyosh
你说的“分享 GitHub 问题”是什么意思? - cesarferreira
如果您可以创建一个 Github 问题,您可以将一些代码复制粘贴到其中以显示它在哪里无法正常工作。 - yoshyosh

11

王国世界的事情有所进展 - 如果有人现在看到这个,有一个属性可以设置:

Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true

它就像宣传的那样工作。 (顺便说一下:如果您尝试其他方法,则上面的许多语法已更改)

Github PR https://github.com/realm/realm-cocoa/pull/3463


5

我认为删除Realm数据库文件是有效的答案,因为问题是关于删除整个存储而不是迁移它。

这里有一个快速的Swift代码(截至Swift 2.1和Realm 0.96.2):

if let path = Realm.Configuration.defaultConfiguration.path {
    try! NSFileManager().removeItemAtPath(path)
}

如果在加载存储时发生迁移错误,我会在应用程序的DEBUG版本中使用此代码,然后重新创建存储。在开发过程中,架构可能会经常变化,所以始终进行迁移会很繁琐。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接