2017-11-02 2 views
0

하나의 응용 프로그램에 두 개의 영역 파일이 있습니다.이 파일을 마이그레이션 할 때 잘못되었습니다. 나는 스키마 버전을 매번 변경하지 않으면 서 Xcode에서 자동으로 영역 업데이트를 원합니다.하나의 응용 프로그램에서 여러 영역 파일을 마이그레이션하는 방법

class News: Object { 
    @objc dynamic var name: String 
} 

class NewsManager { 
    static var realm = try! Realm() 
    static var cacheRealm: Realm = { 

     let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, 
                 appropriateFor: nil, create: false) 
     let url = documentDirectory.appendingPathComponent("cache.realm") 
     var config = Realm.Configuration() 
     config.fileURL = url 
     return try! Realm(configuration: config) 
    }() 
} 

나는 뉴스 같은 같은 @objc 동적 VAR 제목에 새 속성을 추가 할 때 : 문자열, I 추가 AppDelegate에 FUNC 응용 프로그램 (_ 응용 프로그램에 다음 코드 : UIApplication, didFinishLaunchingWithOptions의 launchOptions : UIApplicationLaunchOptionsKey : 모든 = 무기 호) -> BOOL

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { migration, oldSchemaVersion in 

    }) 
Realm.Configuration.defaultConfiguration = config 

복귀 시도에서 충돌의 메시지?! 영역 (구성 : 구성) in NewsManager.

Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors: 
- Property 'News.test' has been added." UserInfo={Error Code=10, NSLocalizedDescription=Migration is required due to the following errors: 
- Property 'News.test' has been added.}: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.69.2/src/swift/stdlib/public/core/ErrorType.swift, line 181 

어떻게해야합니까?

영역 : 3.0.1

스위프트 : 4.0

아이폰 OS : 예상대로 10

답변

0

영역이 노력하고 있습니다. 일부 모델 변경 모델은 Realm이 자동으로 마이그레이션 할 수 있으며, 다른 모델 은 수동 마이그레이션을 제공하기 위해이 필요합니다. 당신의 모범이 그들 중 하나입니다.

String 유형의 새롭지 않은 옵션 속성을 추가 했으므로 Realm은 기존 모델을 모두 거쳐야하며 해당 속성에 무엇을 넣어야하는지 파악해야합니다. 속성이 String? 인 경우 nil을 기본값으로 사용하는 것이 좋으며 Realm이 자동으로 마이그레이션을 수행 할 수 있습니다. 그러나 유형이 String이고 분별력있는 기본값이 없으므로 Realm은 각 모델 오브젝트에 대해 새 특성 값을 수동으로 지정해야합니다.

이 "문제"를 해결하는 올바른 방법은 스키마 번호를 증가시키고 마이그레이션이 필요한 방식으로 모델을 변경할 때마다 실제로 새 속성의 새 값을 지정하는 마이그레이션 블록을 제공하는 것입니다.

자세한 내용은 documentation on migrations을 참조하십시오.

+0

** @ objc 동적 var title : 문자열? ** 및 ** @ objc 동적 var title : String = ""**, 또한 충돌합니다. ** cache.realm **. 그래서 새로운 속성을 추가 한 후에 Xcode를 실행할 때 schemaVersion을 늘려야합니까? –

+0

새로운 비 선택적 속성 추가와 같이 마이그레이션 블록이 필요한 변경을 수행하는 경우 'schemaVersion'을 늘려야합니다. – AustinZ