【问题标题】:Realm Reserved Words领域保留字
【发布时间】:2017-01-04 02:10:26
【问题描述】:

我在使用 Realm Swift 时遇到问题。我有一个对象,它假设存储有关用户创建的角色的信息。但是某些属性没有保存。如果我只用一个字母切换对象的名称,它就会保存并正确读取。第一个示例拒绝保存除race 属性的默认值之外的任何内容,但第二个示例将任何值保存到racea 属性没有问题。这是什么原因造成的?

示例 1

class Character: Object {

    //MARK: Properties
    dynamic var id: Int = 1
    dynamic var name: String = "John Appleseed"
    dynamic var level: Int = 1
    dynamic var exp: Int = 0
    dynamic var race: Int = 0
    dynamic var career: Int = 0
    dynamic var currentHealth: Int = 100
    dynamic var inventory: Inventory? = Inventory()

    //MARK: Realm
    override static func primaryKey() -> String? {
        return "id"
    }
}

示例 2

class Character: Object {

    //MARK: Properties
    dynamic var id: Int = 1
    dynamic var name: String = "John Appleseed"
    dynamic var level: Int = 1
    dynamic var exp: Int = 0
    dynamic var racea: Int = 0
    dynamic var career: Int = 0
    dynamic var currentHealth: Int = 100
    dynamic var inventory: Inventory? = Inventory()

    //MARK: Realm
    override static func primaryKey() -> String? {
        return "id"
    }
}

扩展

extension Character {
    func getRace() -> String {
        return Fitventure.species[race]
    }
}

【问题讨论】:

  • 可能问题出在您代码的其他地方,这看起来不错
  • @Tj3n 我已经更新了帖子。似乎是 getRace() 函数导致了这个问题。当我有一个与变量不同名的函数时,为什么领域会这样做?

标签: ios swift realm


【解决方案1】:

如果是 getRace() 函数导致了这个问题,那么在我看来,这可能是 Swift 和 Realm 用来工作的 Objective-C 运行时反射特性之间的不幸冲突。

Realm 为它的每个属性动态生成自己的访问器,以便明确管理如何从磁盘保存和检索数据。因此,无法覆盖 Realm 属性的访问器,这样做会产生奇怪的行为。

最佳实践是您已经发现的:当创建另一个以某种方式转换 Realm 属性的方法时,您需要确保该函数没有可能由 Objective-C 运行时隐式生成的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2013-07-17
    相关资源
    最近更新 更多