swift - 在 Swift Realm 中删除带有子类的对象
问题描述
我在 Swift Realm 中有一个非常简单的数据库用于待办事项应用程序:
项目及其父类别。
用户可以通过简单的滑动操作删除项目和类别。该操作工作正常,删除项目时没有问题。如果我删除一个类别,这也可以,但我仍然可以在领域浏览器中看到项目,即使不再有父项,这些项目仍保留在数据库中。显然用户看不到这些,他们什么也不做,但最好用父类别摆脱这些。有什么简单的方法可以做到这一点吗?
class Category: Object{
@objc dynamic var name: String = ""
@objc dynamic var color: String = ""
@objc dynamic var order = 0
let items = List<Item>()
override static func primaryKey() -> String? {
return "order"
}
static func incrementalIDCat() -> Int {
let realm = try! Realm()
return (realm.objects(Category.self).max(ofProperty: "order") as Int? ?? 0) + 1
}
}
class Item: Object {
@objc dynamic var title: String = ""
@objc dynamic var done: Bool = false
@objc dynamic var dateCreated: Date?
@objc dynamic var order = 0
var parentCategory = LinkingObjects(fromType: Category.self, property: "items")
override static func primaryKey() -> String? {
return "order"
}
static func incrementalIDItem() -> Int {
let realm = try! Realm()
return (realm.objects(Item.self).max(ofProperty: "order") as Int? ?? 0) + 1
}
}
override func updateModel(at indexPath: IndexPath) {
if let categoryForDeletion = self.categories?[indexPath.row] {
do {
try self.realm.write {
self.realm.delete(categoryForDeletion)
}
} catch {
print("Error deleting category, \(error)")
}
}
tableView.reloadData()
}
解决方案
你先删除就行了items
。
self.realm.delete(categoryForDeletion.items)
self.realm.delete(categoryForDeletion)
或者,使用此扩展程序,您可以执行此操作。
self.realm.delete(categoryForDeletion, cascading: true)
推荐阅读
- python - 使用 Polyglot 的 Text 类创建新文本对象的问题
- itext - 如何将 GPL 许可证用于 pdf 优化器
- python - 如何生成仅包含有限给定重复元素的组合?
- redirect - 如何在iis中从二级域到三级域进行URL重写
- azure - 缩短桌面应用程序的 Azure AD 访问令牌生命周期
- python - 搜索两个关键字的 arXiv API 问题
- python - 使用 Scipy/Python 简化一组线性方程
- javascript - JS:通过特定键将对象数组转换为对象
- r - 如何找到适合我的数据的幂函数以及如何绘制它
- java - 将使用 DES-EDE-CBC 的 Ruby 加密迁移到 Java 会产生不同的结果