RLMRealm

Objective-C

@interface RLMRealm : NSObject

Swift

@_nonSendable(_assumed) class RLMRealm : NSObject

RLMRealmインスタンス(Realm とも呼ばれる)は、Realm データベースを表します。

Realm はディスク上( +[RLMRealm realmWithURL:]を参照)またはメモリ( RLMRealmConfigurationを参照)に保存できます。

RLMRealm インスタンスは内部的にキャッシュされ、実行ループの 1 回の反復内に 1 つのスレッドで複数回(同じパスまたは識別子を使用して)同等のRLMRealmオブジェクトを構築すると、通常同じRLMRealmオブジェクトが返されます。

RLMRealmインスタンスが確実に破棄されるようにしたい場合(たとえば、Realm を開き、いくつかのプロパティを確認した後、Realm ファイルを削除して再度開きたい場合)は、Realm を使用するコードを配置します@autoreleasepool {}内で、それへの他の強力な参照がないことを確認します。

警告

停止していないRLMRealmインスタンスはスレッドされており、スレッドやディスパッチ キューとの間で共有することはできません。 そのような操作を試みると例外がスローされます。 このメソッドは、Realm を操作する各スレッドで呼び出す必要があります。 ディスパッチ キューの場合、ディスパッチされるブロックごとにこれを呼び出す必要があります。キューではすべてのブロックが同じスレッドで実行されることが保証されないためです。

Realm の作成と初期化

  • デフォルトの Realm のインスタンスを取得します。

    デフォルトの Realm は、 RLMRealmパラメータを取らないが、それ以外の点では特別でないRLMObjectクラス メソッドによって使用されます。 デフォルトの Realm は、iOS 上のアプリケーションのドキュメントディレクトリ、macOS 上のアプリケーション サポートディレクトリ、および vOS のキャッシュディレクトリに、 default.realmとして保存されます。

    デフォルトの Realm はデフォルトのRLMRealmConfigurationを使用して作成されます。これは+[RLMRealmConfiguration setDefaultConfiguration:]から変更できます。

    宣言

    Objective-C

    + (nonnull instancetype)defaultRealm;

    Swift

    class func `default`() -> Self

    戻り値

    現在のスレッドのデフォルトのRLMRealmインスタンス。

  • 指定されたキューにバインドされたデフォルトの Realm のインスタンスを取得します。

    キューバインドされた RMRealm は、開かれたスレッドに制限されるのではなく、指定されたキューに制限されます。 これらは、ブロックがキューにディスパッチする限り、どのスレッドからでもアクセスでき、通知はスレッドの実行ループではなくキューに配信されます。

    Realm はシリアル キューにのみ制限できます。 キューで制限された RMRealm インスタンスはそのキューにない場合でも取得できますが、最初にキューにディスパッチせずにそのインスタンスで操作を実行しようとすると、誤ったスレッド例外がスローされます。

    デフォルトの Realm はデフォルトのRLMRealmConfigurationを使用して作成されます。これは+[RLMRealmConfiguration setDefaultConfiguration:]から変更できます。

    宣言

    Objective-C

    + (nonnull instancetype)defaultRealmForQueue:(nonnull dispatch_queue_t)queue;

    Swift

    class func defaultRealm(for queue: dispatch_queue_t) -> Self

    パラメーター

    queue

    Realm を構成するシリアル ディスパッチ キュー。

    戻り値

    特定のキューのデフォルトのRLMRealmインスタンス。

  • 指定された構成を持つRLMRealmインスタンスを取得します。

    宣言

    Objective-C

    + (nullable instancetype)
        realmWithConfiguration:(nonnull RLMRealmConfiguration *)configuration
                         error:(NSError *_Nullable *_Nullable)error;

    Swift

    convenience init(configuration: RLMRealmConfiguration) throws

    パラメーター

    configuration

    Realm の作成時に使用する構成オブジェクト。

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    RLMRealmインスタンス。

  • 指定されたキューにバインドされた指定された構成を持つRLMRealmインスタンスを取得します。

    キューバインドされた RMRealm は、開かれたスレッドに制限されるのではなく、指定されたキューに制限されます。 これらは、ブロックがキューにディスパッチする限り、どのスレッドからでもアクセスでき、通知はスレッドの実行ループではなくキューに配信されます。

    Realm はシリアル キューにのみ制限できます。 キューで制限された RMRealm インスタンスはそのキューにない場合でも取得できますが、最初にキューにディスパッチせずにそのインスタンスで操作を実行しようとすると、誤ったスレッド例外がスローされます。

    宣言

    Objective-C

    + (nullable instancetype)
        realmWithConfiguration:(nonnull RLMRealmConfiguration *)configuration
                         queue:(nullable dispatch_queue_t)queue
                         error:(NSError *_Nullable *_Nullable)error;

    Swift

    convenience init(configuration: RLMRealmConfiguration, queue: dispatch_queue_t?) throws

    パラメーター

    configuration

    Realm の作成時に使用する構成オブジェクト。

    queue

    Realm を構成するシリアル ディスパッチ キュー。

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    RLMRealmインスタンス。

  • 指定されたファイル URL で永続化されたRLMRealmインスタンスを取得します。

    宣言

    Objective-C

    + (nonnull instancetype)realmWithURL:(nonnull NSURL *)fileURL;

    Swift

    convenience init(url fileURL: URL)

    パラメーター

    fileURL

    Realm を保存するファイルのローカル URL。

    戻り値

    RLMRealmインスタンス。

  • 非同期に Realm を開き、指定されたキューのブロックに配信します。

    Realm を非同期に起動すると、指定されたキューにディスパッチする前に、バックグラウンド スレッド上で Realm を使用可能な状態に戻すために必要なすべての作業(時間がかかる可能性のある移行の実行など)がバックグラウンド スレッドで実行されます。 さらに、同期された Realm は、操作がローカルでダウンロードされ利用可能になった時点で利用可能なすべてのリモート コンテンツを待機します。

    コールバック関数に渡される Realm は、 -[RLMRealm realmWithConfiguration:queue:error]が使用されていた場合と同様に、コールバック キューに制限されます。

    宣言

    Objective-C

    + (nonnull RLMAsyncOpenTask *)
        asyncOpenWithConfiguration:(nonnull RLMRealmConfiguration *)configuration
                     callbackQueue:(nonnull dispatch_queue_t)callbackQueue
                          callback:(nonnull RLMAsyncOpenRealmCallback)callback;

    Swift

    class func asyncOpen(with configuration: RLMRealmConfiguration, callbackQueue: dispatch_queue_t, callback: @escaping RLMAsyncOpenRealmCallback) -> RLMAsyncOpenTask

    パラメーター

    configuration

    Realm を開くときに使用する構成オブジェクト。

    callbackQueue

    コールバックを実行するシリアル ディスパッチ キュー。

    callback

    コールバック ブロック。 Realm が正常に開かれた場合は、引数として に渡されます。 それ以外の場合は、問題を説明するNSErrorが代わりにブロックに渡されます。

  • Realm で使用されるRLMSchema

    宣言

    Objective-C

    @property (nonatomic, readonly) RLMSchema *_Nonnull schema;

    Swift

    var schema: RLMSchema { get }
  • Realm が現在書込みトランザクションを実行しているかどうかを示します。

    警告

    このプロパティをチェックするだけで、オブジェクトを作成、更新、または削除する必要があるたびに書込みトランザクションを開始します。 指定すると、多数の書込みトランザクションが作成され、パフォーマンスが低下する恐れがあります。 代わりに、単一のトランザクション中に複数の更新を実行することを常に優先してください。

    宣言

    Objective-C

    @property (nonatomic, readonly) BOOL inWriteTransaction;

    Swift

    var inWriteTransaction: Bool { get }
  • このRLMRealmインスタンスの作成に使用されたRLMRealmConfigurationオブジェクト。

    宣言

    Objective-C

    @property (nonatomic, readonly) RLMRealmConfiguration *_Nonnull configuration;

    Swift

    var configuration: RLMRealmConfiguration { get }
  • この Realm にオブジェクトが含まれているかどうかを示します。

    宣言

    Objective-C

    @property (nonatomic, readonly) BOOL isEmpty;

    Swift

    var isEmpty: Bool { get }
  • この Realm が固定されているかどうかを示します。

    詳細は、次を参照してください:

    -[RLMRealm freeze]

    宣言

    Objective-C

    @property (nonatomic, readonly, getter=isFrozen) BOOL frozen;

    Swift

    var isFrozen: Bool { get }
  • この Realm の固定(不変)スナップショットを返します。

    固定された Realm は、Realm のデータの特定のバージョンの不変のスナップショット ビューです。 通常の RMRealm インスタンスとは異なり、Realm に行われた書込みを反映するようにライブ更新されることはなく、任意のスレッドからアクセスできます。 固定された Realm への書込みは許可されておらず、書込みトランザクションを開始しようとすると例外がスローされます。

    固定された Realm から読み取られるすべてのオブジェクトとコレクションも固定されます。

    宣言

    Objective-C

    - (nonnull RLMRealm *)freeze;

    Swift

    func freeze() -> RLMRealm
  • この Realm のライブ参照を返します。

    返された Realm から読み取られたすべてのオブジェクトとコレクションは、固定されなくなります。 このメソッドは、まだ固定されていない場合はselfを返します。

    宣言

    Objective-C

    - (nonnull RLMRealm *)thaw;

    Swift

    func thaw() -> RLMRealm

ファイル管理

  • 指定されたローカル URL に Realm の圧縮され、オプションで暗号化されたコピーを書込みます。

    宛先ファイルがすでに存在することはできません。

    このメソッドが書込みトランザクション (write transaction) 内から呼び出されると、前の書込みトランザクションがコミットされた時点のデータではなく、現在のデータが書き込まれることに注意してください。

    宣言

    Objective-C

    - (BOOL)writeCopyToURL:(nonnull NSURL *)fileURL
             encryptionKey:(nullable NSData *)key
                     error:(NSError *_Nullable *_Nullable)error;

    Swift

    func writeCopy(to fileURL: URL, encryptionKey key: Data?) throws

    パラメーター

    fileURL

    Realm を保存するためのローカル URL。

    key

    新しいファイルを暗号化するための任意の 64 バイト暗号化キー。

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    YES Realm がディスクに正常に書き込まれた場合は 、エラーが発生した場合はNOになります。

  • 指定された構成で指定された指定された場所に Realm のコピーを書込みます。

    提供された構成がRLMUserから派生している場合、この Realm は同期機能を有効にしてコピーされます。

    宛先ファイルがすでに存在することはできません。

    宣言

    Objective-C

    - (BOOL)writeCopyForConfiguration:(nonnull RLMRealmConfiguration *)configuration
                                error:(NSError *_Nullable *_Nullable)error;

    Swift

    func writeCopy(for configuration: RLMRealmConfiguration) throws

    パラメーター

    configuration

    Realm 構成。

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    YES Realm がディスクに正常に書き込まれた場合は 、エラーが発生した場合はNOになります。

  • 指定された構成の Realm ファイルがディスク上にローカルに存在するかどうかを確認します。

    非同期、メモリ内以外の Realm の場合、これは-[NSFileManager.defaultManager fileExistsAtPath:config.path]と同じです。 同期された Realm の場合、Realm を開くときに実行されるように、サーバー、仮想パス、ユーザーに基づいてディスク上の実際のパスを計算します。

    宣言

    Objective-C

    + (BOOL)fileExistsForConfiguration:(nonnull RLMRealmConfiguration *)config;

    Swift

    class func fileExists(for config: RLMRealmConfiguration) -> Bool

    パラメーター

    config

    の有無を確認する Realm 構成。

    戻り値

    指定された構成の Realm ファイルがディスクに存在する場合は はい、そうでない場合は 。

  • 指定された構成のローカル Realm ファイルと関連する一時ファイルを削除します。

    これにより、特定の構成で Realm を開くことで作成される「.realm」、「.note」、および「.management」ファイルが削除されます。 .lock ファイル(永続化されたデータを含まず、Realm ファイルが開かれるたびに最初から再作成される)は削除されません。

    Realm は現在、スレッドまたは別のプロセスで開いてはなりません。 その場合、これは NULLではない を返し、 RRMAlreadyOpen エラーを報告します。削除が発生している間に別のスレッドで Realm を開こうとすると、ブロックされます(その後、新しい Realm を作成してそれを開きます)。

    Realm がすでに存在しない場合は、 NOが返され、 NSFileNoSatchFileError というエラーが報告されます。

    宣言

    Objective-C

    + (BOOL)deleteFilesForConfiguration:(nonnull RLMRealmConfiguration *)config
                                  error:(NSError *_Nullable *_Nullable)error;

    Swift

    class func deleteFiles(for config: RLMRealmConfiguration) throws -> Bool

    パラメーター

    config

    削除する Realm を識別する Realm 構成。

    戻り値

    いずれかのファイルが削除された場合は はい、それ以外の場合は ではありません。

Realm が変更されたときの通知の受信

  • この Realm の変更の通知ハンドラーを追加し、通知トークンを返します。

    通知ハンドラーは、現在のスレッドまたは他のスレッドで各書込みトランザクションがコミットされた後に呼び出されます。

    ハンドラー ブロックは、追加されたのと同じスレッドで呼び出され、現在実行ループ内にあるスレッドにのみ追加できます。 バックグラウンド スレッドで実行ループを具体的に作成して実行している場合を除き、これは通常、メイン スレッドのみになります。

    ブロックには、次の定義があります。

    typedef void(^RLMNotificationBlock)(RLMNotification notification, RLMRealm *realm);
    

    次のパラメータを受け取ります。

    • NSString * notification : 受信通知の名前。 送信される通知の内容については、 RLMRealmNotificationを参照してください。
    • RLMRealm * Realm : この通知が発生した Realm。

    宣言

    Objective-C

    - (nonnull RLMNotificationToken *)addNotificationBlock:
        (nonnull RLMNotificationBlock)block;

    Swift

    func addNotificationBlock(_ block: @escaping RLMNotificationBlock) -> RLMNotificationToken

    パラメーター

    block

    Realm 通知を処理するために呼び出されるブロック。

    戻り値

    変更通知を引き続き受信する限り保持する必要があるトークン オブジェクト。

Realm への書き込み

  • Realm で書込みトランザクション (write transaction) を開始します。

    Realm ファイルごとに一度に開くことができる書込みトランザクションは 1 つだけです。 書込みトランザクションはネストできず、すでに書込みトランザクションが行われている Realm で書込みトランザクションを開始しようとすると、例外がスローされます。 他のスレッドまたは他のプロセス内の同じ Realm ファイルに対するRLMRealmインスタンスからbeginWriteTransactionへの呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。

    書込みトランザクションを開始する前に、 beginWriteTransactionrefreshが呼び出された場合と同様にRLMRealmインスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。

    書込みトランザクションが実行ループの複数のサイクルにまたがる場合はまれに、書込みトランザクションがコミットされるまで、書込みトランザクションに参加する Realm が起動していることを確認する必要があります。

    宣言

    Objective-C

    - (void)beginWriteTransaction;

    Swift

    func beginWriteTransaction()
  • 現在の書込みトランザクション内のすべての書込み操作をコミットし、トランザクションを終了します。

    変更を保存すると、この特定のRLMRealmインスタンスに登録されているすべての通知ブロックが同期的に呼び出されます。 他のスレッドまたはコレクションに登録された通知ブロックは非同期に呼び出されます。 この書込みトランザクション (write transaction) に関する特定の通知を希望しない場合は、 commitWriteTransactionWithoutNotifying:error:を参照してください。

    このメソッドは、書込み (write) を保存するために使用できるディスク容量が不足している場合や、予期しない I/O エラーが発生している場合に失敗することがあります。 このバージョンの メソッドは、エラーが発生したときに例外をスローします。 エラーを処理する場合は、代わりにNSError出力パラメータを含むバージョンを使用してください。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (void)commitWriteTransaction;
  • 現在の書込みトランザクション内のすべての書込み操作をコミットし、トランザクションを終了します。

    変更を保存すると、この特定のRLMRealmインスタンスに登録されているすべての通知ブロックが同期的に呼び出されます。 他のスレッドまたはコレクションに登録された通知ブロックは非同期に呼び出されます。 この書込みトランザクション (write transaction) に関する特定の通知を希望しない場合は、 commitWriteTransactionWithoutNotifying:error:を参照してください。

    このメソッドは、書込み (write) を保存するために使用できるディスク容量が不足している場合や、予期しない I/O エラーが発生している場合に失敗することがあります。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (BOOL)commitWriteTransaction:(NSError *_Nullable *_Nullable)error;

    Swift

    func commitWriteTransaction() throws

    パラメーター

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    トランザクションが成功したかどうか。

  • 変更の特定の通知ブロックを通知せずに、現在の書込みトランザクション内のすべての書込み操作をコミットします。

    変更を保存すると、この特定のRLMRealmインスタンスに登録されているすべての通知ブロックが同期的に呼び出されます。 他のスレッドまたはコレクションに登録された通知ブロックは、非同期に呼び出されるようにスケジュールされます。

    関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックを通知するようスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。

    このメソッドに渡されるトークンは、この特定のRLMRealmインスタンスの通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。

    このメソッドは、書込み (write) を保存するために使用できるディスク容量が不足している場合や、予期しない I/O エラーが発生している場合に失敗することがあります。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (BOOL)commitWriteTransactionWithoutNotifying:
                (nonnull NSArray<RLMNotificationToken *> *)tokens
                                             error:(NSError *_Nullable *_Nullable)
                                                       error;

    Swift

    func commitWriteTransactionWithoutNotifying(_ tokens: [RLMNotificationToken]) throws

    パラメーター

    tokens

    この書込みトランザクション (write transaction) で行われた変更について通知されないコールバックの追加から返された通知トークンの配列。

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    トランザクションが成功したかどうか。

  • 現在の書込みトランザクション中に行われたすべての書込みを元に戻し、トランザクションを終了します。

    これにより、Realm 内のすべてのオブジェクトは、書込みトランザクション (write transaction) の開始時の状態にロールバックされ、トランザクションが終了します。

    これにより、削除されたオブジェクトのデータは復元されますが、無効化されたオブジェクト インスタンスは有効化されません。 Realm に追加されたRLMObjectは、管理されなくなるのではなく、無効化されます。 次のコードがあるとします。

    ObjectType *oldObject = [[ObjectType objectsWhere:@"..."] firstObject];
    ObjectType *newObject = [[ObjectType alloc] init];
    
    [realm beginWriteTransaction];
    [realm addObject:newObject];
    [realm deleteObject:oldObject];
    [realm cancelWriteTransaction];
    

    oldObjectnewObject はどちらもYES に対してisInvalidated を返しますが、oldObject を提供したクエリを再実行すると、有効なオブジェクトが再度返されます。

    トランザクション中に変更されたオブジェクトの KVE オブジェクトは、初期値に戻った変更について通知されますが、キャンセルされた書込みトランザクションによって他の通知は生成されません。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (void)cancelWriteTransaction;

    Swift

    func cancelWriteTransaction()
  • 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    詳細は、次を参照してください:

    [RLMRealm transactionWithoutNotifying:block:error:]

    宣言

    Objective-C

    - (void)transactionWithBlock:(nonnull void (^)(void))block;
  • 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    詳細は、次を参照してください:

    [RLMRealm transactionWithoutNotifying:block:error:]

    宣言

    Objective-C

    - (BOOL)transactionWithBlock:(nonnull void (^)(void))block
                           error:(NSError *_Nullable *_Nullable)error;

    Swift

    func transaction(_ block: () -> Void) throws
  • 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    詳細は、次を参照してください:

    [RLMRealm transactionWithoutNotifying:block:error:]

    宣言

    Objective-C

    - (void)transactionWithoutNotifying:
                (nonnull NSArray<RLMNotificationToken *> *)tokens
                                  block:(nonnull void (^)(void))block;

    Swift

    func transactionWithoutNotifying(_ tokens: [RLMNotificationToken], block: () -> Void)
  • 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    書込みトランザクションはネストできず、すでに書込みトランザクションに参加している Realm で書込みトランザクションを実行しようとすると、例外がスローされます。 他のスレッドのRLMRealmインスタンスからtransactionWithBlock:への呼び出しは、現在の書込みトランザクションが完了するまでブロックされます。

    書込みトランザクションを開始する前に、 transactionWithBlock:refreshが呼び出された場合と同様にRLMRealmインスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。

    関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックを通知するようスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。

    このメソッドに渡されるトークンは、この特定のRLMRealmインスタンスの通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。

    宣言

    Objective-C

    - (BOOL)transactionWithoutNotifying:
                (nonnull NSArray<RLMNotificationToken *> *)tokens
                                  block:(nonnull void (^)(void))block
                                  error:(NSError *_Nullable *_Nullable)error;

    Swift

    func transactionWithoutNotifying(_ tokens: [RLMNotificationToken], block: () -> Void, error: ()) throws

    パラメーター

    tokens

    この書込みトランザクション (write transaction) で行われた変更について通知されないコールバックの追加から返された通知トークンの配列。

    block

    実行する アクション を含むブロック。

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    トランザクションが成功したかどうか。

  • Realm が現在非同期書込み操作を実行しているかどうかを示します。 これは、 beginAsyncWriteTransactioncommitAsyncWriteTransaction 、またはasyncTransactionWithBlock:を呼び出すと はい になり、スケジュールされたすべての非同期書込み作業が完了するまでその状態は維持されます。

    警告

    これがYESの場合、Realm を閉じるか無効にすると、スケジュールされた作業が完了するまでブロックされます。

    宣言

    Objective-C

    @property (nonatomic, readonly) BOOL isPerformingAsynchronousWriteOperations;

    Swift

    var isPerformingAsynchronousWriteOperations: Bool { get }
  • 非同期書込みトランザクションを開始します。 この関数は、バックグラウンド スレッドで書込みトランザクションを非同期に開始し、トランザクションが開始されると元のスレッドまたはキューでブロックを呼び出します。 beginWriteTransactionとは異なり、書込みトランザクション内で別のスレッドが実行されている場合は、呼び出しスレッドをブロックすることはなく、常にすぐに返されます。 この関数(または非同期書込みトランザクションを実行する他の関数)を複数回呼び出すと、キューに入れられたのと同じ順序で呼び出されるブロックがキューに入れられます。 これには、同期トランザクションとは異なり、書込みトランザクション ブロック内からの呼び出しが含まれます。

    宣言

    Objective-C

    - (RLMAsyncTransactionId)beginAsyncWriteTransaction:
        (nonnull void (^)(void))block;

    Swift

    func beginAsyncWriteTransaction(_ block: @escaping () -> Void) -> RLMAsyncTransactionId

    パラメーター

    block

    書込みトランザクション (write transaction) 内で実行するアクションを含むブロック。 blockは、 commitAsyncWriteTransactioncommitWriteTransaction 、またはcancelWriteTransactionを呼び出して終了する必要があります。 これらの呼び出しのいずれも行わずに返すことは、 cancelWriteTransactionを呼び出すことと同じです。

    戻り値

    非同期トランザクションを識別する ID 。ブロックが呼び出される前にcancelAsyncTransaction:に渡すことができ、ブロックの保留中の呼び出しをキャンセルします。

  • 書込みトランザクションを非同期にコミットします。 呼び出しは をすぐに返し、I/O が専用のバックグラウンド スレッドで実行されている間に呼び出し元の続行を許可します。 これは、書込みトランザクションがbeginWriteTransactionで開始されたか、 beginAsyncWriteTransactionで開始されたかに関係なく使用できます。

    宣言

    Objective-C

    - (RLMAsyncTransactionId)commitAsyncWriteTransaction:
                                 (nullable void (^)(NSError *_Nullable))
                                     completionBlock
                                           allowGrouping:(BOOL)allowGrouping;

    Swift

    @_unsafeInheritExecutor func commitAsyncWriteTransaction(_ completionBlock: (((any Error)?) -> Void)?, allowGrouping: Bool) -> RLMAsyncTransactionId

    パラメーター

    completionBlock

    コミットがエラーで完了するか失敗すると、ソース スレッドまたはキューで呼び出されるブロック。

    allowGrouping

    YESの場合、 commitAsyncWriteTransaction:への複数の連続した呼び出しをバッチ処理して 1 つのグループの安定ストレージに永続化できます。 これにより、特にバッチされる個々のトランザクションが小さい場合に書込みパフォーマンスが向上します。 クラッシュや停電が発生した場合、コミットするための呼び出しが返されたすぐにデータが永続化されたことを保証する通常の保証ではなく、グループ化されたトランザクションのすべてが失われるか、トランザクションが正常に実行されないかのどちらかになります。

    戻り値

    非同期トランザクションのコミットを識別する ID は、完了ブロックが呼び出される前にcancelAsyncTransaction:に渡され、ブロックの保留中の呼び出しがキャンセルされます。 これはコミット自体をキャンセルしないことに注意してください。

  • 書込みトランザクションを非同期にコミットします。 呼び出しは をすぐに返し、I/O が専用のバックグラウンド スレッドで実行されている間に呼び出し元の続行を許可します。 これは、書込みトランザクションがbeginWriteTransactionで開始されたか、 beginAsyncWriteTransactionで開始されたかに関係なく使用できます。

    宣言

    Objective-C

    - (RLMAsyncTransactionId)commitAsyncWriteTransaction:
        (nonnull void (^)(NSError *_Nullable))completionBlock;

    Swift

    func commitAsyncWriteTransaction(_ completionBlock: @escaping ((any Error)?) -> Void) -> RLMAsyncTransactionId

    パラメーター

    completionBlock

    コミットがエラーで完了するか失敗すると、ソース スレッドまたはキューで呼び出されるブロック。

    戻り値

    非同期トランザクションのコミットを識別する ID は、完了ブロックが呼び出される前にcancelAsyncTransaction:に渡され、ブロックの保留中の呼び出しがキャンセルされます。 これはコミット自体をキャンセルしないことに注意してください。

  • 書込みトランザクションを非同期にコミットします。 呼び出しは をすぐに返し、I/O が専用のバックグラウンド スレッドで実行されている間に呼び出し元の続行を許可します。 これは、書込みトランザクションがbeginWriteTransactionで開始されたか、 beginAsyncWriteTransactionで開始されたかに関係なく使用できます。

    宣言

    Objective-C

    - (RLMAsyncTransactionId)commitAsyncWriteTransaction;

    Swift

    func commitAsyncWriteTransaction() -> RLMAsyncTransactionId

    戻り値

    非同期トランザクションのコミットを識別する ID は、完了ブロックが呼び出される前にcancelAsyncTransaction:に渡され、ブロックの保留中の呼び出しがキャンセルされます。 これはコミット自体をキャンセルしないことに注意してください。

  • 非同期トランザクションのキューにあるブロックをキャンセルします。 これにより、非同期開始または非同期コミットに渡されたブロックをキャンセルできます。 開始をキャンセルすると、そのトランザクションは完全にキャンセルされますが、コミットをキャンセルすると完了コールバックの呼び出しがキャンセルされるだけで、コミットは引き続き実行されます。 トランザクションはブロックが呼び出される前にのみキャンセルでき、ブロック内からcancelAsyncTransaction:を呼び出す操作は必要ありません。

    宣言

    Objective-C

    - (void)cancelAsyncTransaction:(RLMAsyncTransactionId)asyncTransactionId;

    Swift

    func cancelAsyncTransaction(_ asyncTransactionId: RLMAsyncTransactionId)

    パラメーター

    asyncTransactionId

    beginAsyncWriteTransaction:またはcommitAsyncWriteTransaction:のいずれかのトランザクション ID。

  • 書込みトランザクション 内で指定されたブロックに含まれるアクションを非同期に実行します。 書込みトランザクションはbeginAsyncWriteTransaction:を呼び出す場合と同様に非同期に開始され、デフォルトではブロックが完了した後にトランザクションは非同期にコミットされます。 ブロック内からcommitWriteTransactionまたはcancelWriteTransactionを明示的に呼び出して、書込みトランザクションを同期にコミットまたはキャンセルすることもできます。

    宣言

    Objective-C

    - (RLMAsyncTransactionId)
        asyncTransactionWithBlock:(nonnull void (^)(void))block
                       onComplete:
                           (nullable void (^)(NSError *_Nonnull))completionBlock;

    Swift

    func asyncTransaction(_ block: @escaping () -> Void, onComplete completionBlock: ((any Error) -> Void)? = nil) -> RLMAsyncTransactionId

    パラメーター

    block

    実行する アクション を含むブロック。

    completionBlock

    コミットがエラーで完了するか失敗すると、ソース スレッドまたはキューで呼び出されるブロック。

    戻り値

    非同期トランザクションを識別する ID 。ブロックが呼び出される前にcancelAsyncTransaction:に渡すことができ、ブロックの保留中の呼び出しをキャンセルします。

  • 書込みトランザクション 内で指定されたブロックに含まれるアクションを非同期に実行します。 書込みトランザクションはbeginAsyncWriteTransaction:を呼び出す場合と同様に非同期に開始され、デフォルトではブロックが完了した後にトランザクションは非同期にコミットされます。 ブロック内からcommitWriteTransactionまたはcancelWriteTransactionを明示的に呼び出して、書込みトランザクションを同期にコミットまたはキャンセルすることもできます。

    宣言

    Objective-C

    - (RLMAsyncTransactionId)asyncTransactionWithBlock:
        (nonnull void (^)(void))block;

    Swift

    func asyncTransaction(_ block: @escaping () -> Void) -> RLMAsyncTransactionId

    パラメーター

    block

    実行する アクション を含むブロック。

    戻り値

    非同期トランザクションを識別する ID 。ブロックが呼び出される前にcancelAsyncTransaction:に渡すことができ、ブロックの保留中の呼び出しをキャンセルします。

  • Realm と Realm によって管理される未処理のオブジェクトを最新データを指すように更新します。

    Realm のバージョンが実際に変更された場合は、変更を反映するために Realm とコレクションの通知が送信されます。 コレクション通知はバックグラウンド スレッドで準備されるため、これには時間がかかる場合があります。 そのため、メイン スレッドでこのメソッドを呼び出すことは推奨されません。

    宣言

    Objective-C

    - (BOOL)refresh;

    Swift

    func refresh() -> Bool

    戻り値

    Realm で更新が行われたかどうか。 実際にデータが変更されない場合でも、 YESが返される場合があることに注意してください。

  • このプロパティをYESに設定すると、他のスレッドで変更が発生したときにこの Realm を自動的に更新します。

    YES (デフォルト)に設定されている場合、他のスレッドで行われた変更は、変更がコミットされた後の実行ループの次のサイクルでこの Realm に反映されます。 NOに設定されている場合、最新データを取得するには、Realm で-refreshを手動で呼び出して更新する必要があります。

    デフォルトでは、バックグラウンド スレッドにはアクティブな実行ループがないため、 autorefreshYESに設定されている場合でも、最新バージョンに更新するには-refreshを手動で呼び出す必要があることに注意してください。

    このプロパティが有効になっている場合でも、自動更新が行われる前にいつでも-refreshを呼び出して Realm を更新できます。

    書込みトランザクションでは、自動更新が無効になっている場合でも、Realm は常に最新バージョンに進み、コミット時にローカル通知が生成されます。

    強力な参照がない Realm でautorefreshを無効にしても効果はなく、次に Realm が作成されるときにautorefreshYESに戻ります。 これは通常、更新するものがないことを意味するため通常は関係ありません(管理対象のRLMObjectRLMArrayRLMResultsは、それらを管理する Realm への強力な参照を持っているため)、次のコマンドでRLMRealm.defaultRealm.autorefresh = NOを設定することを意味します。 Realm オブジェクトの保存後のみ、 application:didFinishLaunchingWithOptions:は機能しません。

    デフォルトは YES です。

    宣言

    Objective-C

    @property (nonatomic) BOOL autorefresh;

    Swift

    var autorefresh: Bool { get set }
  • Realm によって管理されているすべてのRLMObjectRLMResultsRLMLinkingObjectsRLMArrayを無効にします。

    Realm は、アクセスされるデータのバージョンに対して読み取りロックを保持するため、異なるスレッドで Realm に加えられた変更によって、この Realm が認識するデータが変更または削除されることはありません。 このメソッドを呼び出すと読み取りロックが解除され、ディスクで使用される領域は、ファイルを拡張するのではなく、後の書込みトランザクションで再利用できるようになります。 このメソッドは、以前に Realm から不要になったデータを読み込んだバックグラウンド スレッドで長時間のブロッキング操作を実行する前に呼び出す必要があります。

    現在のスレッドでこのRLMRealmインスタンスから取得されたすべてのRLMObjectRLMResults 、およびRLMArrayインスタンスは無効化されます。 RLMObjectRLMArrayは使用できません。 RLMResultsは空になります。 Realm 自体は有効なままであり、次に Realm からデータが読み取られるときに、新しい読み取りトランザクションが暗黙的に開始されます。

    Realm からのデータを読み込まずに、または Realm からのデータを読み取る前に、このメソッドを複数回連続で呼び出すと、操作は実行されません。

    宣言

    Objective-C

    - (void)invalidate;

    Swift

    func invalidate()

オブジェクトへのアクセス

  • RLMThreadSafeReferenceが最初に作成されたときに参照されたオブジェクトと同じオブジェクトを返しますが、このスレッドの現在の Realm では解決されたオブジェクトを返します。 参照が作成された後にこのオブジェクトが削除された場合はnilを返します。

    警告

    RLMThreadSafeReferenceオブジェクトは最大 1 回で解決される必要があります。 RLMThreadSafeReferenceを解決しないと、参照が再割り当てされるまで、Realm のソース バージョンが固定されます。 参照が複数回解決された場合は例外がスローされます。

    警告

    書込みトランザクション (write transaction) 内で を呼び出せません。

    注意

    ソース Realm がこれよりも後のバージョンであった場合は、この Realm を更新します。

    詳細は、次を参照してください:

    +[RLMThreadSafeReference referenceWithThreadConfined:]

    宣言

    Objective-C

    - (nullable id)resolveThreadSafeReference:
        (nonnull RLMThreadSafeReference *)reference;

    パラメーター

    reference

    この Realm で解決するスレッド定義オブジェクトへのスレッドセーフな参照。

Realm からのオブジェクトの追加と削除

  • Realm にオブジェクトを追加します。

    追加されると、このオブジェクトは Realm によって管理されると見なされます。 RLMRealmRLMObjectのサブクラスではobjectsWhere:セレクターを使用して検索できます。

    追加すると、このオブジェクトが参照するすべての子関係も Realm にまだ含まれていない場合は、Realm に追加されます。

    オブジェクトまたは関連するオブジェクトがすでに別の Realm によって管理されている場合は、例外がスローされます。 管理対象オブジェクトのコピーを別の Realm に挿入するには、 -[RLMObject createInRealm:withObject:]を使用します。

    追加するオブジェクトは有効である必要があり、Realm から過去に削除されたことはありません( isInvalidatedNOである必要があります)。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (void)addObject:(nonnull RLMObject *)object;

    Swift

    func add(_ object: RLMObject)

    パラメーター

    object

    この Realm に追加するオブジェクト。

  • コレクション内のすべてのオブジェクトを Realm に追加します。

    これは、コレクション内のすべてのオブジェクトに対してaddObject:を呼び出すのと同じです。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    詳細は、次を参照してください:

    addObject:

    宣言

    Objective-C

    - (void)addObjects:(nonnull id<NSFastEnumeration>)objects;

    Swift

    func addObjects(_ objects: any NSFastEnumeration)

    パラメーター

    objects

    Realm に追加する Realm オブジェクトを含む、 NSArrayRLMArrayRLMResultsなどの列挙可能なコレクション。

  • 既存のオブジェクトを Realm に追加またはアップデートします。

    提供されるオブジェクトには、指定されたプライマリキーが必要です。 Realm 内に同じプライマリキー値を持つオブジェクトが存在しない場合は、オブジェクトが挿入されます。 それ以外の場合、既存のオブジェクトが変更された値で更新されます。

    addObject:と同様に、オブジェクトはすでに別の Realm で管理できません。 値を別の Realm にコピーするには、 -[RLMObject createOrUpdateInRealm:withValue:]を使用します。

    objectに nil の値を持つプロパティまたは KV 値があり、かつアップデートされる既存のオブジェクトの null 可能なプロパティに対応する場合、その null 可能なプロパティは nil に設定されます。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (void)addOrUpdateObject:(nonnull RLMObject *)object;

    Swift

    func addOrUpdate(_ object: RLMObject)

    パラメーター

    object

    追加または更新するオブジェクト。

  • コレクション内のすべてのオブジェクトを Realm に追加または更新します。

    これは、コレクション内のすべてのオブジェクトに対してaddOrUpdateObject:を呼び出すのと同じです。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    詳細は、次を参照してください:

    addOrUpdateObject:

    宣言

    Objective-C

    - (void)addOrUpdateObjects:(nonnull id<NSFastEnumeration>)objects;

    Swift

    func addOrUpdateObjects(_ objects: any NSFastEnumeration)

    パラメーター

    objects

    Realm 内で追加または更新される Realm オブジェクトを含む、 NSArrayRLMArrayRLMResultsなどの列挙可能なコレクション。

  • Realm からオブジェクトを削除します。 オブジェクトが削除されると、無効化されたと見なされます。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Objective-C

    - (void)deleteObject:(nonnull RLMObject *)object;

    Swift

    func delete(_ object: RLMObject)

    パラメーター

    object

    削除するオブジェクト。

  • Realm から 1 つ以上のオブジェクトを削除します。

    これは、コレクション内のすべてのオブジェクトに対してdeleteObject:を呼び出すのと同じです。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    詳細は、次を参照してください:

    deleteObject:

    宣言

    Objective-C

    - (void)deleteObjects:(nonnull id<NSFastEnumeration>)objects;

    Swift

    func deleteObjects(_ objects: any NSFastEnumeration)

    パラメーター

    objects

    Realm から削除するオブジェクトを含む、 NSArrayRLMArrayRLMResultsなどの列挙可能なコレクション。

  • Realm からすべてのオブジェクトを削除します。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    詳細は、次を参照してください:

    deleteObject:

    宣言

    Objective-C

    - (void)deleteAllObjects;

    Swift

    func deleteAllObjects()

同期サブスクリプション

  • このRealmのアクティブなサブスクリプションを表します。これを使用して、Flexible Sync サブスクリプションの追加、削除、更新、検索に使用できます。 ローカルまたはパーティションベースで構成されたRealmからサブスクリプションを取得すると、例外がスローされます。

    宣言

    Objective-C

    @property (nonatomic, readonly, nonnull) RLMSyncSubscriptionSet *subscriptions;

    Swift

    var subscriptions: RLMSyncSubscriptionSet { get }

移行

  • 指定されたローカル URL の Realm のスキーマ バージョンを返します。

    宣言

    Objective-C

    + (uint64_t)schemaVersionAtURL:(nonnull NSURL *)fileURL
                     encryptionKey:(nullable NSData *)key
                             error:(NSError *_Nullable *_Nullable)error;

    パラメーター

    fileURL

    Realm ファイルへのローカル URL。

    key

    ファイルの暗号化に使用される 64 バイトのキー、または暗号化されていない場合はnil

    error

    エラーが発生した場合、 には問題を説明するNSErrorオブジェクトが返されます。 エラーの可能性を考慮していない場合は、 NULLを渡します。

    戻り値

    fileURLの Realm のバージョン。バージョンが読み取れない場合はRLMNotVersionedの Realm のバージョン。

  • 指定されたパスにある Realm で指定された Realm 構成の移行ブロックを実行します。

    このメソッドは Realm を初めて開くときに自動的に呼び出され、明示的に呼び出す必要はありません。 このメソッドを呼び出すことで、移行がいつどのように実行されるかを正確に制御できます。

    詳細は、次を参照してください:

    RRMMigration

    宣言

    Objective-C

    + (BOOL)performMigrationForConfiguration:
                (nonnull RLMRealmConfiguration *)configuration
                                       error:(NSError *_Nullable *_Nullable)error;

    Swift

    class func performMigration(for configuration: RLMRealmConfiguration) throws

    パラメーター

    configuration

    Realm のオープンと移行に使用される Realm 構成。

    戻り値

    移行の適用中に発生したエラー(存在する場合)。

利用できないメソッド

  • なし

    +defaultRealm、+realmWithConfiguration:、または +realmWithURL: を使用します。

    RMRealm インスタンスは Realm によって内部的にキャッシュされ、直接作成することはできません。

    RMRealm への参照を取得するには、 +[RLMRealm defaultRealm]+[RLMRealm realmWithConfiguration:error:] 、または+[RLMRealm realmWithURL]を使用します。

    宣言

    Objective-C

    - (nonnull instancetype)init;
  • なし

    +defaultRealm、+realmWithConfiguration:、または +realmWithURL: を使用します。

    RMRealm インスタンスは Realm によって内部的にキャッシュされ、直接作成することはできません。

    RMRealm への参照を取得するには、 +[RLMRealm defaultRealm]+[RLMRealm realmWithConfiguration:error:] 、または+[RLMRealm realmWithURL]を使用します。

    宣言

    Objective-C

    + (nonnull instancetype)new;

同期

  • この Realm で使用される RMSyncSession を取得します。 これが同期された Realm でない場合は nil になります。

    宣言

    Objective-C

    @property (nonatomic, readonly, nullable) RLMSyncSession *syncSession;

    Swift

    var syncSession: RLMSyncSession? { get }