ios - 从 Realm 中的列表中删除对象 - Swift

标签 ios swift uicollectionview realm realm-list

我有一个 Collection View ,您可以在其中选择要删除的多个单元格。这意味着如果删除了多个单元格,那么 Realm 中也应该删除多个对象 - 每个单元格 1 个对象。

我有一个函数,它接受一个 Int 数组,该数组将从 Collection View 的选定 indexPaths 中填充。

问题是我不确定如何同时做这两件事
1)删除Realm和
中的对象 2) 更新 List 且没有删除的对象

我的代码是:

我得到的索引路径是这样的:

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

我这样调用该函数:

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

有什么想法吗?

最佳答案

List.removeAll()不会从 Realm 中删除对象。它只是将它们从 List 对象中移除,删除它们与其父对象(在本例中为 favorite 对象)的关系。删除对象及其父 List 对象是一种称为“级联删除”和 it's still being discussed 的功能。在 Realm GitHub 上。

如果您真的想删除它们,只需调用realm.delete(favorite!.videos)。这将从 Realm 中删除它们并自动清除 List 属性。

尽管如此,您可能需要谨慎实现。一旦从 Realm 中删除了一个 Object,任何对它的现有引用都不能重新添加回 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)
    }
}

只要您在 Collection View 上设置了 Realm 通知 block ,就可以将它们从您的 UI 中删除。

关于ios - 从 Realm 中的列表中删除对象 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912417/

相关文章:

ios - 谷歌应用引擎。 Google 应用引擎将 POST 请求视为 GET

ios - 在 iOS 教程中, "Property toDoItems not found on object type of XYZToDoListViewController"

ios - 如何在 iOS 上的 Firebase 中获取 FCMToken?

Swift firebase 我的数据库变得有点复杂,我应该如何访问这个 child ?

ios - 如何在 Swift playground 中使用 STDIN

ios - SwiftUI - 限制 View 内矩形的拖动

ios - 在视频上覆盖文本非常慢,任何更快的替代方案

ios - UICollectionView reloadData 只工作两次

ios - UICollectionView header 兼容 View

ios - 如何检查 indexPath 是否有效,从而避免 "attempt to scroll to invalid index path"错误?