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

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 发生了一些变化。对我来说,使用 RealmSwiftthis 删除所有对象: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 中的所有对象?

如何删除jQuery对象中元素

如何强制删除 S3 存储桶中的所有对象版本,然后最终使用 aws-sdk-go 删除整个存储桶?

如何按创建日期删除 MongoDB 中的数据? [复制]