2017-01-11 11 views
0

私たちのアプリでは、実行時にロードして更新できるスタティックレルムを使用しています。レルムスキームの正しいバージョンを識別するために、レルムスキーム記述のmd5ハッシュを使用します。したがって、スキーマが変更された場合、データベースの新しいバージョンを提供するだけで、アプリケーションがそれを見つけることができます。これにより、複数のバージョンを同時に使用することができ、それぞれが対応するデータベースをロードまたは更新できます。レルムスキームの説明がシミュレータとデバイス上で一致しない

これは、最近、レルムスキームの説明が、まれにしかシミュレータとデバイスで同じではないことがわかってから、長い時間がかかりました。私たちは約35のエンティティを持っています。奇妙なことは、フィールドの順序が1つだけ異なるということです。

SomeEntity { 
    telefon { 
     type = bool; 
     objectClassName = (null); 
     linkOriginPropertyName = (null); 
     indexed = NO; 
     isPrimary = NO; 
     optional = YES; 
    } 
    email { 
     type = bool; 
     objectClassName = (null); 
     linkOriginPropertyName = (null); 
     indexed = NO; 
     isPrimary = NO; 
     optional = YES; 
    } 
} 

何が違うのですか? "telefon"と "email"は実際のデバイス上で順番に切り替わります。もちろん、別のmd5ハッシュにつながります。

説明はすべてのデバイスで同一であってはなりませんか?

レルムスキームを識別する明確で信頼できる方法は何でしょうか?

編集
両方のデバイスで同じバージョンの領域を使用します。

答えて

0

すべてのレルムファイルは、schemaVersionと呼ばれる値を介して、そのスキーマのバージョン管理を追跡します。レルムがあるスキーマのバージョンを明示的に制御するには、Configurationオブジェクトの値をインクリメントします。それは、移行をトリガするインクリメント:

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

またschemaVersionAtURL(_:encryptionKey:)関数を呼び出すことによって、それを開かずにレルムファイルの現在のschemaVersionを確認することができます。これにより、レルムファイルを開く前に、スキーマバージョンに基づいてレルムファイルを使用して何を行うかを選択できるようになります。

Realmスキーマのdescriptionは、デバッグの目的で使用されており、決してアプリケーションのビジネスロジックの一部として信頼されることはありませんでした。

関連する問題