首页 > 解决方案 > 在 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()
}

标签: swiftdatabaserealm

解决方案


你先删除就行了items

self.realm.delete(categoryForDeletion.items)
self.realm.delete(categoryForDeletion)

或者,使用此扩展程序,您可以执行此操作。

self.realm.delete(categoryForDeletion, cascading: true)

推荐阅读