Realm 파일 삭제 - Swift SDK
경우에 따라 디스크에서 영역 파일을 완전히 삭제해야 할 수도 있습니다.
Realm은 꼭 필요한 경우를 제외하고는 데이터를 메모리에 복사하지 않습니다. 결과적으로 영역에서 관리하는 모든 객체는 디스크에 있는 파일에 대한 참조를 갖게 됩니다. 파일을 안전하게 삭제하려면 먼저 다음 객체의 할당이 취소되었는지 확인해야 합니다.
영역에서 읽거나 영역에 추가한 모든 객체
모든 목록 및 결과 객체
모든 ThreadSafeReference 객체
영역 자체
경고
영역이 열려 있는 동안에는 파일을 삭제하지 마세요.
영역 의 인스턴스가 하나 이상 열려 있는 상태에서 영역 파일 또는 해당 보조 파일을 삭제 하면 영역 이 손상되거나 동기화 가 중단될 수 있습니다.
마이그레이션을 피하기 위해 Realm 파일 삭제하기
앱을 개발하면서 빠르게 반복하는 경우 스키마를 변경할 때 Realm 파일을 마이그레이션하는 대신 삭제하는 것이 좋습니다. Realm 구성은 이 경우에 도움이 되는 deleteRealmIfMigrationNeeded 매개변수를 제공합니다.
이 속성을 true
로 설정하면 SDK는 마이그레이션이 필요할 때 영역 파일을 삭제합니다. 그런 다음 개발 또는 테스트 데이터에 대한 마이그레이션 블록을 작성하는 대신 새 스키마와 일치하는 객체를 만들 수 있습니다.
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 파일 삭제
실제로 영역 파일을 삭제할 수 있는 안전한 두 가지 시기가 있습니다.
영역을 열기 전에 애플리케이션을 시작할 때.
명시적
autorelease
풀 내에서 영역을 연 후에만 해당 영역 내의 모든 객체의 할당을 취소할 수 있습니다.
+[RLMRealm 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(for:) 메서드 를 사용하여 특정 구성에 대해 .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 사용 시 클라이언트 재설정 오류가 발생할 수 있습니다. 클라이언트를 재설정하는 동안 앱은 영역의 로컬 사본을 삭제하고 Atlas App Services 백엔드에서 업데이트된 버전을 다운로드해야 합니다.
동기화된 영역은 로컬에 저장되고 오프라인에서 사용할 수 있기 때문에 동기화된 영역을 삭제하면 데이터가 손실될 수 있습니다. 클라이언트가 영역에 쓰기 작업을 했지만 영역이 해당 변경 사항을 업로드하지 않은 경우 동기화된 영역을 삭제하면 클라이언트는 해당 데이터를 잃게 됩니다. 클라이언트가 장기간 네트워크에 연결되어 있지 않거나 동기화를 다시 시작해야 하는 동기화 오류가 발생하면 영역에서 변경 사항을 업로드하지 못할 수 있습니다.
이 시나리오를 처리하는 메서드에 대한 자세한 내용은 클라이언트 재설정을 참조하세요.