从Realm中的List中删除对象 - Swift

JEL*_*JEL 6 realm ios uicollectionview swift realm-list

我有一个集合视图,您可以在其中选择要删除的多个单元格.这意味着如果删除多个单元格,则还应在Realm中删除多个对象 - 每个单元格1个对象.

我有一个函数,它接受一个数组,这些数组Int将从集合视图的选定indexPaths中填充.

问题是我不知道如何做到这两点
1)删除Realm中的对象和
2)拥有List最新的没有删除的对象

我的代码是:

我像这样得到索引路径:

let indexPaths = collectionView.indexPathsForSelectedItems

这是我接受indexPaths,更新List和删除Realm中对象的函数.它目前无法正常工作,因为没有删除对象.我注意到removeAll没有删除任何东西.

func removeVideos(at indexes: [Int]) {
        let newVideos = List<Video>()
        for (index, video) in favorite!.videos.enumerated() {
            if !indexes.contains(index) {
                newVideos.append(video)
            }
        }

        let realm = try! Realm()
        try! realm.write {
            favorite!.videos.removeAll()

            newVideos.forEach { newVideo in
                favorite!.videos.append(newVideo)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我这样调用这个函数:

removeVideos(at: indexPaths.map { $0.item })

有什么想法吗?

TiM*_*TiM 15

List.removeAll()不会从Realm中删除对象.它只是将它们从该List对象中删除,删除它们与其父对象(在本例中为favorite对象)的关系.删除对象及其父List对象是一个名为"级联删除"的功能,它仍在 Realm GitHub上讨论.

如果您确实想要删除它们,那么只需致电realm.delete(favorite!.videos).这将从Realm中删除它们并自动清除该List属性.

你可能需要小心你的实现.一旦Object从Realm中删除了一个,任何现有的引用都无法重新添加回Realm.仅删除newVideo对象本身而不是清除整个对象可能是恰当的List.

func removeVideos(at indexes: [Int]) {
    let newVideos = [Video]()
    for (index, video) in favorite!.videos.enumerated() {
        if !indexes.contains(index) {
            newVideos.append(video)
        }
    }

    let realm = try! Realm()
    try! realm.write {
        realm.delete(newVideos)
    }
}
Run Code Online (Sandbox Code Playgroud)

只要您在集合视图上设置了Realm通知块,就应该只需要将它们从UI中删除即可.