2017-01-04 14 views
0

レルムスイフトに問題があります。私は、ユーザーが作成した文字に関する情報を格納するオブジェクトを持っています。ただし、特定のプロパティは保存されません。オブジェクトの名前を1文字だけ切り替えると、正しく保存されて読み込まれます。最初の例では、raceプロパティの既定値以外の値の保存は拒否されていますが、2番目の例では値を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] 
    } 
} 
+1

おそらく問題はあなたのコードのどこかにあります。これはうまく見えます。 – Tj3n

+0

@ Tj3n投稿を更新しました。 'getRace()'関数が問題を引き起こしていたようです。変数と同じ名前を持たない関数があると、なぜ領域がこれを行うのですか? –

答えて

0

getRace()機能が問題を引き起こしていた場合、それは、これがあるかもしれないことを私にように聞こえますSwiftとObjective-Cランタイムリフレクション機能の間の残念な衝突Realmが仕事に使っています。

レルムは、データをディスクからどのように保存および取得するかを明示的に管理するために、それぞれのプロパティのために独自のアクセサを動的に生成します。その結果、Realmプロパティのアクセサをオーバーライドすることはできません。そうすることで、奇妙な動作が発生します。

Realmプロパティを何らかの形で変換する別のメソッドを作成するときに、Objective-Cランタイムによって暗黙的に生成された名前が関数に含まれていないことを確認する必要があります。