Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm ファイルの削除 - Swift SDK

項目一覧

  • 移行を回避するための Realm ファイルの削除
  • Realm ファイルの削除
  • クライアントのリセット中の Realm ファイルの削除

場合によっては、ディスクから Realm ファイルを完全に削除することが必要になる場合があります。

Realm は、絶対に必要な場合を除き、メモリへのデータのコピーを避けます。 その結果、Realm によって管理されるすべてのオブジェクトは、ディスク上の ファイルを参照します。 ファイルを安全に削除する前に、以下のオブジェクトの 非ロケーション を確認する必要があります。

  • Realmから読み取られる、またはRealmに追加されたすべてのオブジェクト

  • すべてのリストおよび結果オブジェクト

  • すべてのスレッドセーフリファレンス オブジェクト

  • Realm 自体

警告

Realm が開いている間はファイルを削除しない

Realm の 1 つ以上のインスタンスが開いているときに Realm ファイルまたはその予備ファイルのいずれかを削除すると、Realm が破損したり、 同期が中断されたりする可能性があります。

アプリを開発しながら迅速に反復処理する場合は、スキーマを変更するときにRealmファイルを移行する代わりにRealmファイルを削除することをお勧めします。 Realm の構成では、この場合に対応するためにdeleteRealmIfMigrationNetedパラメータが提供されています。

このプロパティを trueに設定すると、移行が必要なときに SDK は Realm ファイルを削除します。 その後は、開発データまたはテスト データ用の移行ブロックを書き込む代わりに、新しいスキーマに一致するオブジェクトを作成できます。

do {
// Delete the realm if a migration would be required, instead of migrating it.
// While it's useful during development, do not leave this set to `true` in a production app!
let configuration = Realm.Configuration(deleteRealmIfMigrationNeeded: true)
let realm = try Realm(configuration: configuration)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}

実際には、Realm ファイルを削除するには次の 2 回安全な場合があります。

  1. Realm を開く前に、アプリケーションの起動時。

  2. 明示的なautoreleaseプール内でのみ Realm を開始した後。これにより、その中のすべてのオブジェクトの処理が保証されます。

+[RMRealm deleteFilesForConfiguration:error:]クラス メソッドを使用して、特定の構成の.realm.note.managementファイルを削除できます。

@autoreleasepool {
// all Realm usage here -- explicitly guarantee
// that all realm objects are deallocated
// before deleting the files
}
// Get configuration
RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
RLMUser *user = [app currentUser];
RLMRealmConfiguration *configuration = [user configurationWithPartitionValue:@"some partition value"];
configuration.objectClasses = @[Task.class];
NSError *error = nil;
// Delete realm files for that configuration
[RLMRealm deleteFilesForConfiguration:configuration
error:&error];
if (error) {
// Handle error
}

Realm.deleteFiles(用)を使用して、特定の構成の.realm.note.managementファイルを削除できます。 クラス メソッド。

autoreleasepool {
// all Realm usage here -- explicitly guarantee
// that all realm objects are deallocated
// before deleting the files
}
do {
let app = App(id: APPID)
let user = try await app.login(credentials: Credentials.anonymous)
var configuration = user.flexibleSyncConfiguration()
_ = try Realm.deleteFiles(for: configuration)
} catch {
// handle error
}

Device Sync を使用しているときに、クライアント リセット エラーが発生する可能性があります。 クライアントのリセット中に、アプリは Realm のローカル コピーを削除し、Atlas App Services バックエンドから更新されたバージョンをダウンロードする必要があります。

同期された Realm はローカルに保存され、オフラインで使用できるため、同期された Realm を削除するとデータが失われる可能性があります。 クライアントが Realm に書き込みを行い、Realm がそれらの変更をアップロードしていない場合、同期された Realm を削除すると、クライアントはそのデータを失います。 クライアントが長期間にわたってネットワーク接続を持っていない場合、または同期を再起動する必要がある同期エラーが発生した場合、Realm は変更をアップロードできなくなることがあります。

このシナリオの処理方法の詳細については、「クライアントのリセット 」を参照してください。

戻る

Realm の構成とオープン