swift - 从 LinkingObjects 列表中删除特定对象 - Realm Swift

标签 swift realm

我目前正在一个测试项目中试用 Realm,我一直在努力从列表中删除特定对象。 LensDBObjectListDBObject . LensDBObject 包含镜头列表,ListDBObject 是现有镜头的列表。镜头可以在多个列表中,我想从特定列表中删除特定镜头,但如果从其他列表中删除则不删除。

下面是我的两个类:

@objcMembers class LensDBObject: Object {

   dynamic var id = UUID().uuidString
   dynamic var manufacturer = ""
   dynamic var series = ""
   dynamic var serial = ""
   dynamic var isSelected = false

   override static func primaryKey() -> String? {
       return "id"
   }

   let objects = LinkingObjects(fromType: ListDBObject.self, property: "lensList")

@objcMembers class ListDBObject: Object {
   dynamic var listName = ""
   let lensList = List<LensDBObject>()

下面是我在列表中查找特定镜头的代码。返回的值是我所期望的。

let listToSearch = realm.objects(ListDBObject.self).filter("listName == %@", "List 542")
print(listToSearch)
let filteredResults = listToSearch[0].lensList.filter("manufacturer == %@ AND series == %@ AND serial == %@", "Panavision" , "Primo Prime", "407")
print(filteredResults)

但是,当我尝试删除 filteredResults 时,它会将其从 lensDBOject 中完全删除。我只想从这个特定列表中删除这个特定镜头。

try! realm.write {
    realm.delete(filteredResults)
}

我尝试使用 for 循环获取列表中镜头的索引,然后直接从中删除它。但它仍然到处删除镜头。

我错过了什么吗?我应该使用一对多关系而不是 LinkingObject 吗?

谢谢你的帮助!

最佳答案

尝试这样的事情。您只想从列表中删除镜头,而不是将其从 Realm 中删除。

try! realm.write {
    filteredResults.forEach { lens in
        if let index = listToSearch[0].lensList.index(of: lens) {
            listToSearch[0].lensList.remove(at: index)
        }
    }
}

请注意,这将从该特定列表中删除所有与您的滤镜匹配的镜头。

编辑:更新以反射(reflect) Realm 的自定义 List 类。

if let 是必需的,因为如果在列表中找不到对象,index(of:) 可能会返回 nil。此外,我们必须一次处理一个项目,而不是先获取所有索引,因为删除一个项目会导致索引数组错误。

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

相关文章:

ios - swift 4 KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED

swift - 类内的变异函数

ios - UITextField 在 iOS 14 中抛出各种错误

ios - Swift-NIO 安全的 websocket 服务器

android - 如何将 RealmResults 对象转换为 RealmList?

json - 如何在 Swift 中使用 Mappable 协议(protocol)映射自定义对象的 Realm 列表

android - 将 Realm 对象服务器用于协作应用程序