RealmSwiftObject 不由 Realm 管理。使用返回的 class 获取对象

RealmSwiftObject is not managed by the Realm. Fetch objects with returned class

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

Terminating app due to uncaught exception 'RLMException', reason: 'Object type 'RealmSwiftObject' is not managed by the Realm. If using a custom objectClasses / objectTypes array in your configuration, add RealmSwiftObject to the list of objectClasses / objectTypes.'

为什么会出现崩溃,如何解决?我需要一个用于枚举的 var 来将 Realm 对象与枚举案例相关联。

代码对我有用,只需一个更改 - 我使用 DogClass 和 PersonClass 进行测试,所以我有一个像你的 class 枚举

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
         ^^

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

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"
    }
}