2013-02-23 2 views
1

그래서 하단에 sqlite를 사용하는 iOS에서이 응용 프로그램을 만들고 있습니다. 기본적으로 핵심 데이터에서 만든 .sqlite 파일을 사용자가 iTunes를 통해 액세스 할 수있는 Documents 디렉토리에 복사하는 내보내기/가져 오기 기능을 구현하려고합니다. (가져 오기 기능은 분명히 반대 방향으로 작동합니다.)iOS에서 .sqlite-files를 사용자에게 노출 시키십시오 - 모범 사례입니까?

몇 가지 찬성 의견을 듣고 싶습니다. 사용자가 .sqlite 파일을 보류하면 내 데이터 모델이 향상됩니다. 어쨌든 영업 비밀은 아니지만 ... 데이터베이스에는 많은 관계가 있으므로 탭으로 구분 된 파일 (예 :)로 내보내기가 편리하지 않습니다.

또한 가져 오기 기능과 .sqlite 파일에 문제가있을 수 있습니다. .sqlite가 이전 데이터 모델에서 생성 된 경우 어떻게됩니까? 사용자가 수동으로 .sqlite를 어떤 식 으로든 업데이트하여 데이터 모델이 유효하지 않은 경우 어떻게 될까요? 나는 import 함수에서 많은 검증을해야만한다고 생각한다.

제안 사항?

답변

2

데이터 모델에 대해 걱정할 필요가 없습니다. 어쨌든 어떻게 생겼는지 알고 싶어하는 사람은 누구나 찾을 수 있습니다. iExplorer과 같은 앱을 사용하면 iTunes를 통해 사용할 수없는 SQLite 파일과 Core Data 모델 파일 자체를 포함하여 휴대 전화를 감옥에 넘길 필요없이 앱에 대한 모든 종류의 것들을 찾을 수 있습니다. 데이터 모델의 세부 사항은 이미 안전하지 않을 것입니다.

다른 버전 - Core Data에는 버전 충돌을 감지하고 데이터 저장소를 최신 버전으로 업데이트하기위한 다양한 마이그레이션 옵션을 제공하는 마이그레이션 시스템이 포함되어 있습니다. 모델을 업데이트 할 때 모델 마이그레이션 기술을 사용하는 한 이전 버전을 복사하는 사용자에게 아무런 문제가 없습니다. 마치 사용자가 새 버전으로 방금 업그레이드 한 것처럼 마이그레이션하게됩니다. 응용 프로그램의 버전.

0

나는 raywanderlich.com의 기사를 따랐지만 가져 오기 및 내보내기를 위해 이메일을 사용합니다.

사실 내 .sqlite 파일을 압축하고 .abc (앱 고유의 확장 프로그램 사용) 파일의 확장자 이름을 바꾸어 내보내기를 구현했습니다. 이 방법으로 사용자는 확장자를 알지 못하므로이 파일을 편집하여 손상 될 가능성이 적습니다. 그리고 가져 오기 위해 파일을 압축 해제하고 기존 모델을 바꿉니다. 여기에서 필자는 기존 데이터를 가져온 파일로 대체합니다. 나는 하나의 응용 프로그램에서 그것을 사용했습니다. 그리고 아무 불평도. 확장 기능을 알 수없는 경우 사람들은 거의 편집하지 않습니다.

이전 데이터 모델 인 경우 핵심 데이터 마이그레이션을 처리 한 AFAIK는 이전 모델을 새 모델로 마이그레이션해야합니다.

가져 오는 중에 파일의 유효성 검사와 관련하여 .sqlite 파일의 유효성을 검사 할 수 없다고 생각합니까? 유효성을 검사하려면 .sqlite 파일을 열고 읽어야하며 읽으려면 스키마와 일치해야합니다. 손상된 경우 응용 프로그램이 충돌합니다. 예외를 잡아서 오류 메시지를 던지기 만하면됩니다. 사용자가 어떤 .sqlite 뷰어를 열려고되지 않을 수도 있습니다

또 다른 방법

  1. 는 .DB 같은에 .sqlite 파일의 이름을 바꿉니다.
  2. xml 또는 json으로 내보내기. 이 방법으로 가져 오기 파일의 유효성을 검사 할 수 있으며 가져 오기 중에 기존 데이터를 바꾸는 것이 아니라면 쉽습니다.

장점 1. 간단한 방법으로 xml 또는 json과의 변환을위한 압축 라이브러리 또는 추가 방법이 필요하지 않습니다.

단점

  1. 그리고 그냥 가져 오는 동안 기존 데이터를 교체하지 않으면, 당신은 많이 할 수있어. 이 엔티티를이 .sqlite에서 다른 엔티티로 복사해야합니다. 이 경우 단순히 json 데이터를 emport 및 파일 확장명을 바꿉니다. 가져 오는 동안 나는 json을 파싱하고 관리되는 객체 컨텍스트를 생성/업데이트합니다. 이 json 경우에는 UUID를 만들어 각 레코드를 고유하게 식별합니다.

.sqlite 생성 된 코어 데이터는 .sqlite 파일이 아니므로 sqllite 뷰어로 열려고하면 사용자가 놀라게됩니다.

일단 파일이 앱에서 사라집니다. 우리는 그것이 어떻게 사용되고 있는지를 통제 할 수 없다. 사용자가 손상된 파일을 가져 오면 오류 메시지가 표시됩니다.

희망이 도움이됩니다.