Удаление объектов с подклассами в Swift Realm - PullRequest
0 голосов
/ 31 марта 2020

У меня действительно простая база данных в Swift Realm для приложения todo:

Элементы и их родительские категории.

Пользователь может удалить как элементы, так и категории с помощью простого действия смахивания , Действие работает отлично, проблем с удалением нет. Если я удаляю категорию, это тоже работает, но я все равно вижу элементы в обозревателе областей, они остаются в базе данных, даже если родительских элементов больше нет. Очевидно, что пользователь не может видеть их, они ничего не делают, но все же, было бы лучше избавиться от них с родительской категорией. Есть ли простые способы сделать это?

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()
}

1 Ответ

1 голос
/ 31 марта 2020

Сначала просто удалите items.

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

Или, используя это расширение , вы можете сделать это.

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