2017-11-02 25 views
0

1つのアプリケーションに2つのレルムファイルがあります。毎回スキーマバージョンを変更せずに、Xcodeで領域を自動的に更新します。複数のレルムファイルを1つのアプリケーションで移行する方法

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タイトルとしてニュースに新しいプロパティを追加します。のUIApplication、didFinishLaunchingWithOptionsのlaunchOptions:文字列、 私はAppDelegate FUNCアプリケーション(_アプリケーションに次のコードを追加します[ UIApplicationLaunchOptionsKey:任意] = nilの) - >ブール

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

    }) 
Realm.Configuration.defaultConfiguration = config 

復帰しようとのクラッシュにメッセージ?!レルム(コンフィグレーション: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

のiOS:10

答えて

0

レルムは期待通りに働いています。いくつかのタイプのモデルの変更Realmは自動的にマイグレーションすることができます。他の人はにはを手動で移行する必要があります。あなたの例のものがその一つです。

タイプStringという新しい非オプションプロパティを追加したので、Realmは既存のモデルをすべて調べ、そのプロパティに何を入れるべきかを判断する必要があります。プロパティーがString?の場合は、nilをデフォルト値として使用すると意味があり、Realmは自動的にマイグレーションを実行できます。ただし、タイプがStringであり、明白な分かりやすいデフォルトはないため、Realmでは各モデルオブジェクトの新しいプロパティの値を手動で指定する必要があります。

この「問題」を修正する正しい方法は、スキーマ番号を増やして、マイグレーションが必要な方法でモデルを変更するたびに実際に新しいプロパティの新しい値を指定するマイグレーションブロックを提供することです。

詳しくはdocumentation on migrationsをご覧ください。

+0

私は** @ objc動的var title:String?**と** @ objc動的var title:String = "" **を追加します。 on ** cache.realm **。だから私は新しいプロパティを追加した後にXcodeで実行するときにschemaVersionを増やす必要がありますか? –

+0

新しい非オプションプロパティの追加など、移行ブロックを必要とする変更を行う場合は、「schemaVersion」を増やす必要があります。 – AustinZ

関連する問題