Realm Blog

Realm Objective‑C & Swift 0.102 – マイグレーションにおけるプロパティ名の変更と、ファイルの自動削除をサポートしました。

Xcode 6.xおよび2.2より古いSwiftはこのバージョンで非推奨となります。次のリリースでは削除されます。

Realm Objective‑CおよびRealm Swift 0.102をリリースしました。

マイグレーションに関して2つの改善を加えました。1つはマイグレーションにおいてプロパティ名を変更できるようになりました。もう一つはマイグレーションが必要なときに自動的に既存のファイルを削除することができる設定を追加しました。

マイグレーション時のプロパティ名の変更

マイグレーションにおいてプロパティ名を変更できるようになりました。プロパティ名の変更は以前のように値をコピーする必要がなく、関連も保持されるので効率的に動作します。

マイグレーション時にプロパティを変更する場合は、変更後のプロパティ名がモデルに存在することと、変更前のプロパティ名がモデルに存在しないことを確認してください。

変更後のプロパティが変更前と異なるNULL可/不可属性、インデックスの設定を持つ場合は、名前の変更の際に適用されます。

以下は、PersonクラスのyearsSinceBirthプロパティをageに変更する例です。

// application(application:didFinishLaunchingWithOptions:)の中に書きます

Realm.Configuration.defaultConfiguration = Realm.Configuration(
  schemaVersion: 1,
  migrationBlock: { migration, oldSchemaVersion in
    // 初めてマイグレーションを実行するのでoldSchemaVersionは0です
    if (oldSchemaVersion < 1) {
      // 名前の変更は`enumerate(_:)`の外側で実行する必要があります。
      migration.renamePropertyForClass(Person.className(), oldName: "yearsSinceBirth", newName: "age")
    }
  })
// [AppDelegate didFinishLaunchingWithOptions:]の中に書きます

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.schemaVersion = 1;
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
  // 初めてマイグレーションを実行するのでoldSchemaVersionは0です
  if (oldSchemaVersion < 1) {
    // 名前の変更は`enumerateObjects:`の外側で実行する必要があります。
    [migration renamePropertyForClass:Person.className oldName:@"yearsSinceBirth" newName:@"age"];
  }
};
[RLMRealmConfiguration setDefaultConfiguration:config];

マイグレーションが必要な場合にRealmファイルを削除する

開発の最中にスキーマが変更されることはよく起こります。しかし、そのたびに完全なマイグレーションを書かなければいけないとしたら、非常に大変です。

そこで、このバージョンでは、deleteRealmIfMigrationNeededというBool型のプロパティをRLMRealmConfiguration/Realm.Configurationに追加しました。このフラグはデフォルトではfalseに設定されているので、自分で有効にしない限りは、Realmのバージョンをアップデートしても予期せずデータが失われることはありません。

不具合の修正

  • 0.101.0で導入された新しいファイルフォーマットにアップグレードする際にクラッシュする問題を修正しました。
  • RLMArray/Listプロパティに対してBETWEEN句のクエリを実行した際に、個々の要素が一致するかどうかを正しく判定するように修正しました。
  • 逆方向の関連が指すオブジェクトが削除されていた場合にクラッシュする問題を修正しました。
  • 他のスレッドがRealmファイルを閉じている最中に、別のスレッドがRealmファイルを開こうとした際に競合が発生する問題を修正しました。

お読みいただきありがとうございます。 Realm で素晴らしいアプリケーションを作りましょう!お困りの際はStack Overflow(日本語)Slack(日本語)Twitter(日本語)GitHub(英語)でご相談ください。


Realm Team

At Realm, our mission is to help developers build better apps faster. We provide a unique set of tools and platform technologies designed to make it easy for developers to build apps with sophisticated, powerful features — things like realtime collaboration, augmented reality, live data synchronization, offline experiences, messaging, and more.

Everything we build is developed with an eye toward enabling developers for what we believe the mobile internet evolves into — an open network of billions of users and trillions of devices, and realtime interactivity across them all.

記事の更新情報を受け取る