2017-03-06 1 views
1

다른 영역 객체를 가리키는 속성이있는 영역 객체의 클래스 이름을 변경할 수 없습니다. 이 클래스는 예를 들어.영역 이동 - 클래스 이름 변경 (복합 클래스 용)

class OldClass: Object { 
    var id: String! 
    var dog: Dog! //this is a Realm Object (with its own table) 
} 

이 작업을 수행하는 방법에 대한 간단한 예를 살펴 보았습니다.

migration.enumerateObjects(ofType: "OldClass", { (oldObject, newObject) in 
    migration.create("NewClass", value: oldObject!) 
}) 

나는 OldClass 및합니다 NewClass 모두에 대한 스키마가 동일했다 경우 위 일하는 것이 기대, 그리고 모든 속성이 아닌 영역의 객체 인 경우. 스키마가 다른 경우, 당신은 이런 식으로 할 수 있다는 것을 모았습니다.

migration.enumerateObjects(ofType: "OldClass", { (oldObject, newObject) in 
    let obj = migration.create("NewClass") 
    obj["id"] = (oldObject["id"] as! String) 
    obj["newPropertyName"] = (oldObject!["oldPropertyName"] as! Int) 
}) 

개체에 다른 영역 개체를 가리키는 속성이있는 경우이 두 예제 중 어느 것도 작동하지 않습니다. RLMException '기존 기본 키 값을 사용하여 객체를 만들 수 없습니다.'라는 메시지가 표시되기 때문에 적어도 의심스러운 것입니다.

내 기존의 기본 키가 Dog 개체를 참조하고 NewClass에서 OldClass로 마이그레이션 할 때 마이그레이션이 이미 존재하는 Dog 개체를 다시 만들려고합니다.

이 마이그레이션을 어떻게 올바르게 수행합니까?

답변