문서 메뉴
문서 홈
/ /
Atlas Device SDK
/ /

Realm 파일 삭제 - Swift SDK

이 페이지의 내용

  • 마이그레이션을 피하기 위해 Realm 파일 삭제하기
  • Realm 파일 삭제
  • 클라이언트 재설정 중 Realm 파일 삭제하기

경우에 따라 디스크에서 Realm 파일을 완전히 삭제해야 할 수도 있습니다.

Realm은 꼭 필요한 경우를 제외하고는 데이터를 메모리에 복사하지 않습니다. 결과적으로 Realm에서 관리하는 모든 객체는 디스크에 있는 파일에 대한 참조를 갖게 됩니다. 파일을 안전하게 삭제하려면 먼저 다음 객체의 할당이 취소되었는지 확인해야 합니다.

  • Realm에서 읽거나 Realm에 추가한 모든 객체

  • 모든 목록 및 결과 객체

  • 모든 ThreadSafeReference 객체

  • Realm 자체

경고

Realm이 열려 있는 동안에는 파일을 삭제하지 마세요.

Realm의 인스턴스가 하나 이상 열려 있는 상태에서 Realm 파일 또는 해당 보조 파일을 삭제하면 Realm이 손상되거나 동기화가 중단될 수 있습니다.

앱을 개발하면서 빠르게 반복하는 경우 스키마를 변경할 때 Realm 파일을 마이그레이션하는 대신 삭제하는 것이 좋습니다. Realm 구성은 이 경우에 도움이 되는 deleteRealmIfMigrationNeeded 매개변수를 제공합니다.

이 속성을 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 파일을 삭제할 수 있는 안전한 두 가지 시기가 있습니다.

  1. Realm을 열기 전에 애플리케이션을 시작할 때.

  2. 명시적 autorelease 풀 내에서 Realm을 연 후에만 해당 Realm 내의 모든 객체의 할당을 취소할 수 있습니다.

+[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
}

Device Sync 사용 시 클라이언트 재설정 오류가 발생할 수 있습니다. 클라이언트를 재설정하는 동안 앱은 Realm의 로컬 사본을 삭제하고 Atlas App Services 백엔드에서 업데이트된 버전을 다운로드해야 합니다.

동기화된 Realm은 로컬에 저장되고 오프라인에서 사용할 수 있기 때문에 동기화된 Realm을 삭제하면 데이터가 손실될 수 있습니다. 클라이언트가 Realm에 쓰기 작업을 했지만 Realm이 해당 변경 사항을 업로드하지 않은 경우 동기화된 Realm을 삭제하면 클라이언트는 해당 데이터를 잃게 됩니다. 클라이언트가 장기간 네트워크에 연결되어 있지 않거나 동기화를 다시 시작해야 하는 동기화 오류가 발생하면 Realm에서 변경 사항을 업로드하지 못할 수 있습니다.

이 시나리오를 처리하는 메서드에 대한 자세한 내용은 클라이언트 재설정을 참조하세요.

돌아가기

Realm 구성 및 열기

다음

Realm 번들