enum DummyEnum {
    case spiderMan
    case anotherMan
    case tanos
    case duppy

    var associatedClass: Object.Type {
        switch self {
        case .spiderMan:
            return WebEntity.self
        default:
            return IronManEntity.self
        }
    }
}

realm.objects(DummyEnum().spiderMan.associatedClass) // returns crash
realm.objects(WebEntity.self) // done well



  由于未捕获的异常“ RLMException”而终止应用程序,原因:
  '对象类型'RealmSwiftObject'不由Realm管理。如果使用
  配置中的自定义objectClasses / objectTypes数组,
  将RealmSwiftObject添加到objectClasses的列表中/
  objectTypes。”


为什么发生崩溃,以及如何解决?我需要一个用于枚举的变量,以将Realm对象与枚举案例关联。

最佳答案

该代码为我工作,但有一个更改-我使用DogClass和PersonClass进行测试,所以我有一个像您一样的类枚举

enum realmClasses {
    case dog
    case person

    var associatedClass: Object.Type {
        switch self {
        case .dog:
            return DogClass.self
        case .person:
            return PersonClass.self
        }
    }
}


然后在一个函数中读取所有的狗

let realm = try! Realm()
let dogResults = realm.objects(realmClasses.dog.associatedClass)
for dog in dogResults {
    print(dog)
}


区别在于枚举的访问方式。你有这个

DummyEnum().spiderMan.associatedClass
         ^^


并且我有这个,注意no(),因为实现我的枚举并不需要

realmClasses.dog.associatedClass


哦-我的任何DogClass和PersonClass都像这样

class DogClass: Object {
    @objc dynamic var dog_id = NSUUID().uuidString
    @objc dynamic var dog_name = ""

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

10-07 19:21
查看更多