2016-04-25 10 views
3

モデルファイル内のプロパティのいずれかのデータ型の移行を実行しようとしています。Realmプロパティのデータ型の移行

私が見つけたソースは、主に列の名前が変更された場合や列を1つに結合する場合の移行方法についてのガイドです。

次に、アプリケーションをコンパイルするときに表示されるエラーメッセージを示します。キャッチされない例外により「RLMException」にアプリを終了

、理由: 「移行は、原因、次のエラーのために必要とされています - のプロパティタイプ 『has_completed_profile』プロパティが一致しません。旧タイプ「ブール」、新しいタイプ 'int型

そして、私は0.99.0

答えて

6

まず、最新バージョンを使用しています、あなたはモデルクラスの定義を変更するときに、スキーマのバージョンをインクリメントする必要があります。

古いデータを新しいデータスキーマで保持する場合は、古いデータを移行ブロック内の新しいスキーマ に移行する必要があります。

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { (migration, oldSchemaVersion) in 
    if oldSchemaVersion < 1 { 
     migration.enumerate(TestObject.className(), { (oldObject, newObject) in 
      // Migrate old column to new column 
      // If there is no compatibility between two types 
      // (e.g. String to Int) 
      // you should also write converting the value. 
      newObject!["has_completed_profile"] = oldObject!["has_completed_profile"] 
     }) 
    } 
}) 
let realm = try! Realm(configuration: config) 
+0

これを:あなたはIntに列時間Boolを変更し、古いデータを保持したい場合、あなたは以下のように、移動ブロックを記述する必要があり

// Schema version 0 class TestObject: Object { dynamic var name = "Test" dynamic var has_completed_profile = false } // Schema version 1 class TestObject: Object { dynamic var name = "Test" dynamic var has_completed_profile = 5 } 

:たとえば

役に立つ答えですが、Objective-Cのためのカテゴリでした。 –

+0

私はrealm 0.99も使用しています。そのコードを入力するとコンパイラエラーが発生します。 Realm.Configurationのようなものは、もはやそのように初期化されていません。 Realm.Configuration.init(パス:、inMemoryIdentifier:、encryptionKey:、readOnly:、schemaVersion:、migrationBlock:、objectTypes:<[Object.Type]? >) –

+0

返事をくれてくれてありがとう。Objective-Cで翻訳してくれました。 –

関連する問題