realm-cocoa 마이그레이션 - RLMException이 나오고 앱이 중지되면 파일을 지우고 해결합니다.

3953 단어 SwiftObjective-CRealm
※이것은 iOS/Android 모바일 데이터베이스 Realm에 관한 기사입니다. 자세한 내용은 아래를 참조하십시오.
웹 사이트: 희귀 lm. 이오 , Facebook 그룹: Realm Japan User Group , 질문: 슬랙 채널

-

다음과 같이 Xcode의 콘솔 화면에 'RLMException', reason: 'Migation' is required가 나오고, 앱이 중지되었을 때는 이전 실행했을 때와 Realm 모델 클래스의 스키마가 바뀌어 마이그레이션이 필요합니다. 스키마가 변경되었다는 것은, RLMObject 를 상속해 정의한 클래스의 프로퍼티에 어떠한 변경이 있었다고 하는 것을 가리킵니다. (이름 변경 포함)



스키마의 컬럼이 증가할 때
2015-07-11 13:04:32.142 ASNFindMovie[10892:356134] *** Terminating app due to uncaught exception 'RLMException', reason: 'Migration is required for object type 'ASNProduct' due to the following errors:
- Property 'hoge' has been added to latest object model.'

위와 같은 오류 메시지는 "ASNProduct 클래스에 hoge 속성이 추가되었으므로 마이그레이션이 필요합니다"라는 의미입니다.

스키마의 열이 줄어들 때
2015-07-11 13:01:41.641 ASNFindMovie[10724:352635] *** Terminating app due to uncaught exception 'RLMException', reason: 'Migration is required for object type 'ASNProduct' due to the following errors:
- Property 'hoge' is missing from latest object model.'

위와 같은 오류 메시지는 "ASNProduct 클래스가 hoge 속성을 찾을 수 없기 때문에 마이그레이션이 필요합니다"라는 의미입니다.

왜 마이그레이션이 필요합니까?



Realm은 데이터베이스이며 이전에 사용했던 스키마의 데이터가 Realm 파일에 저장됩니다. 스키마를 변경하면 이전에 저장된 데이터가 새 변경 후 스키마를 지원할 수 없으며 새 스키마를 처리하려면 마이그레이션이 필요합니다.

데이터가 저장되지 않은 경우에도 Realm 파일이 있으면 스키마를 쓰고 Realm을 호출 할 때 이전에 정의 된 스키마와 이전에 사용한 스키마가 일관성이 있습니다. 확인되므로 마이그레이션이 필요합니다.

공식 문서 마이그레이션 섹션에도 설명이 설명되어 있습니다.
공식 문서(한국어) - realm-cocoa 마이그레이션(Objective-C)
공식 문서(한국어) - realm-cocoa 마이그레이션(Swift)

대처법


  • 마이그레이션 실행
    하나는 마이그레이션을 수행하는 방법입니다.
    자세한 내용은 공식 문서의 마이그레이션 섹션을 참조하십시오.
  • Realm 파일을 스키마 변경이있을 때마다 지우기
    개발 초반이라면 스키마가 변경되는 빈도가 높기 때문에 변경이 있을 때마다 Realm 파일을 한 번 지우는 것도 한 가지 방법입니다.

  • Realm 파일을 지우는 방법 (수동으로 지우는 방법)


  • AppDelegate와 같은 적절한 위치에 중단 점 설정
  • 앱을 실행하고 중단점에서 처리를 중지하고 Xcode 콘솔에서 po RLMRealm.defaultRealmPath를 입력합니다. 그러면 defaultRealm까지의 경로가 표시됩니다.
  • 표시된 경로의 끝을 default.realm를 지우고 spotlight 등으로 입력하여 Finder에서 Documents 디렉토리를 표시합니다.
  • Finder에서 표시하고 Realm 관련 파일을 모두 지 웁니다.
  • 앱을 중지했다가 다시 시작했습니다. 그러면 새 스키마 Realm 파일이 생성됩니다.
  • 좋은 웹페이지 즐겨찾기