Realm ObjC & Swift 2.5: クエリの改善とSwift 3.1の対応、不具合の修正
このバージョン(2.5)で読み書きを行ったRealmファイルは自動的にフォーマットがアップグレードされ、以前のバージョンで開くことができなくなります。既存アプリケーションに対して更新を適用する場合は特に注意してください。
Realm Objective‑CおよびRealm Swift 2.5をリリースしました。
このバージョンには新機能としてダイアクリティカルマークを無視した検索、ネストしたオブジェクトに対するNULL
の比較、不具合の修正を含みます。詳しくは下記をご覧ください。
Swift 3.0、3.0.1、3.0.2、3.1のバイナリが含まれます。
同期されたRealmを利用する場合は、Realm Object Server 1.3.0以上が必要になります。
ダイアクリティカルマークを無視して検索する
文字列比較のオプションに[d]
を指定してダイアクリティカルマークの違いを無視して検索することができます。このオプションは大文字・小文字を区別せずに検索するオプション([c]
)と同時に使用することができます。
例:
-
==[d] 'u'
はü
と一致します。 -
BEGINSWITH[d] 'e'
はétoile
と一致します。 -
CONTAINS[d] 'n'
はPiñata
と一致します。 -
ENDSWITH[d] 's'
はdiaçrïtičş
と一致します。 -
ENDSWITH[cd] 'É'
はcafé
と一致します。
注意: LIKE
検索にはこのオプションは使用できません。
ネストしたオブジェクトについてNULL
比較が可能に
複数階層のオブジェクトについてNULL
かどうかの比較ができるようになりました。
例:
class CircleObject: Object {
dynamic var data = ""
dynamic var next: CircleObject?
}
let realm = try Realm()
realm.objects(CircleObject.self).filter("next.next != nil AND next.next.next = nil")
その他の改善
- RLMRealmを直接インスタンス化することは許されていないので、
[[RLMRealm alloc] init]
をunavailable
にし、利用するとコンパイルエラーになるようにしました。 - プライマリキーに指定できない型をプライマリキーに指定している際のエラーメッセージにクラス名を含めるようにしました。
Bug Fixes
- 同期によってスキーマがマージされた際に、不正なカラムのアサーションエラーが発生していた問題を修正しました。
- 同期されたRealmを開く際に何もしないトランザクションが使われていたのを修正しました。
- 同期されたRealmにおいて暗号化をサポートしました。
- 16MBに近いサイズのデータを
{NS}Data
型のプロパティに格納した際にクラッシュする問題を修正しました。 -
{NS}Data
型のプロパティにアクセスした際に、誤ってnil
を返す問題を修正しました。 - トランザクションを開始した際にRealmのバージョンが固定されることにより、ファイルサイズが肥大するのを修正しました。
- 非常に大きなサイズの
RLMArray
/List
型のプロパティを保存しようとした際にアサーションエラーが発生するのを修正しました。 - 同期されたRealmに不正な差分データが同期され、
BadTransactLog
例外が発生するのを修正しました。 -
RLMArray
/List
に通知を設定している場合、削除後に変更するとアサーションエラーが発生するのを修正しました。
Xcode 8.3を使う場合の注意
通常のリリースではObjective‑Cのバイナリは最新のXcodeを利用してビルドしていました。現在の最新版はXcode 8.3です。しかし、Xcode 8.3が生成するバイナリには非常に大きなビットコードが含まれ、以前のバージョンと比べて4倍以上のサイズになってしまいました(rdar://31302382)。そのためiOS版のRealm Objective-Cフレームワークは通常の55MBほどのサイズから158MBになってしまいました。そのためObjective-Cフレームワークは引き続きXcode 8.2を利用してビルドすることにしました。Xcode 8.3でビルドしたフレームワークを利用するにはソースコードからビルドしてください。App Storeから配信される際にビットコードは削除されるので、エンドユーザーにはバイナリサイズによる影響はありません。
お読みいただきありがとうございます。 Realmで素晴らしいアプリケーションを作りましょう!お困りの際はStack Overflow(日本語)、 Slack(日本語)、Twitter(日本語)、GitHub(英語)でご相談ください。