2017-01-04 1 views
0

렐름 스위프트에 문제가 있습니다. 나는 사용자가 만든 캐릭터에 관한 정보를 저장하고있는 객체를 가지고있다. 그러나 특정 속성은 저장되지 않습니다. 개체의 이름을 한 글자 씩 바꾸면 올바르게 저장하고 다시 읽습니다. 첫 번째 예제에서는 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" 
    } 
} 

확장

getRace() 기능은 문제를 일으키는 경우
extension Character { 
    func getRace() -> String { 
     return Fitventure.species[race] 
    } 
} 
+1

아마 코드의 다른 부분에 문제가있는 것 같습니다. – Tj3n

+0

@ Tj3n 게시물을 업데이트했습니다. 'getRace()'함수가 문제를 일으키고있는 것 같습니다. 변수와 같은 이름을 공유하지 않는 함수가있을 때 영역은 왜 이렇게합니까? –

답변

0

, 그것은 소리가 나에게 같은이 될 수 있다는 Swift와 Objective-C 런타임 리플렉션 기능 간의 불행한 충돌 렐름에서 일하는 데 사용됩니다.

영역은 데이터를 디스크에 저장하고 검색하는 방법을 명시 적으로 관리하기 위해 각 속성에 대해 고유 한 접근자를 동적으로 생성합니다. 따라서 Realm 속성의 접근자를 재정의 할 수 없으므로 이상한 동작이 발생합니다.

가장 좋은 방법은 이미 발견 한 것입니다. Realm 속성을 어떻게 든 변환하는 다른 방법을 만들 때 Objective-C 런타임에서 암시 적으로 생성 된 이름이 함수에 없는지 확인해야합니다 .