Realm ファイルの削除 - Swift SDK
場合によっては、ディスクから Realm ファイルを完全に削除することが必要になる場合があります。
Realm は、絶対に必要な場合を除き、メモリへのデータのコピーを避けます。 その結果、Realm によって管理されるすべてのオブジェクトは、ディスク上の ファイルを参照します。 ファイルを安全に削除する前に、以下のオブジェクトの 非ロケーション を確認する必要があります。
Realmから読み取られる、またはRealmに追加されたすべてのオブジェクト
すべてのリストおよび結果オブジェクト
すべてのスレッドセーフリファレンス オブジェクト
Realm 自体
警告
Realm が開いている間はファイルを削除しない
Realm の 1 つ以上のインスタンスが開いているときに Realm ファイルまたはその予備ファイルのいずれかを削除すると、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 ファイルの削除
実際には、Realm ファイルを削除するには次の 2 回安全な場合があります。
Realm を開く前に、アプリケーションの起動時。
明示的な
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 }
クライアントのリセット中の Realm ファイルの削除
Device Sync を使用しているときに、クライアント リセット エラーが発生する可能性があります。 クライアントのリセット中に、アプリは Realm のローカル コピーを削除し、Atlas App Services バックエンドから更新されたバージョンをダウンロードする必要があります。
同期された Realm はローカルに保存され、オフラインで使用できるため、同期された Realm を削除するとデータが失われる可能性があります。 クライアントが Realm に書き込みを行い、Realm がそれらの変更をアップロードしていない場合、同期された Realm を削除すると、クライアントはそのデータを失います。 クライアントが長期間にわたってネットワーク接続を持っていない場合、または同期を再起動する必要がある同期エラーが発生した場合、Realm は変更をアップロードできなくなることがあります。
このシナリオの処理方法の詳細については、「クライアントのリセット 」を参照してください。