2012-08-23 4 views
2

비슷한 성격의 다른 질문은 끝났지 만 이전 sqlite db를 앱 업데이트로 대체하는 것과 관련이 있습니다. 나는 이전의 모든 앱에 대해 그 일을 해왔다. 왜냐하면 그 앱은 본질적으로 참조 용이고 간단한 대체품만으로 충분하기 때문이다.iPhone 앱 업데이트에서 기존 Sqlite db에 콘텐츠 업데이트/삽입

내가 읷을하고있는이 특정 앱은 퀴즈 게임이며 점수를 유지해야합니다. 현재 약 15 개의 질문이있는 4 개의 레벨이 있으며, 나중에 업데이트하면 이러한 질문이 증가 할 수 있습니다. 나는 전에 이것을 한 번도 해 본 적이 없기 때문에 나는 처음부터이 방법을 호기심이 많고 올바르게하려는 의도가 있습니다. 그래서 내 질문은 다음과 같습니다.

  1. Gurus가 추천하는 콘텐츠를 업데이트하는 가장 좋은 방법은 무엇입니까? 버전 번호 (아마도 DB 자체에 있음)가 있고 새 앱을 처음 실행하면 새 콘텐츠가 테이블에 삽입됩니까?
  2. 삽입 쿼리를 저장하는 기본 방법은 무엇입니까? 그것들은 구현 파일에 하드 코드되어야 하는가?

추신. 데이터베이스를 Documents 디렉토리에 복사하므로 앱 업데이트가 지속됩니다.

편집 : 퀴즈 앱은 모든 질문 중 점수 (또는 답변이있는/대답하지 않은 상태)를 유지해야하는 "로고 퀴즈"복제품이라고 덧붙여 야합니다. 따라서 첫 번째 버전에는 60 개의 질문이 있으며 사용자의 답변에 따라 상태가 변경됩니다.

편집 2 : (대 Varchar

_id (정수, 기본 키), levelId (정수), QuestionImage (대 Varchar), CorrectAnswer : 이것은 내가, [질문 표에 대해 가장 걱정 테이블의 구조), boolAnsweredCorrectly (정수).

퀴즈는 로고스 퀴즈와 같습니다. 이미지가 있고 사용자가 대답을 입력해야합니다. 입력 된 응답이 DB의 정답과 일치하면 boolAnsweredCorrectly가 true로 설정됩니다. 내 주요 관심사는 정확하게 (결과에 따라 0 또는 1) boolAnsweredCorectly입니다.

편집 3 : 내가 앱을 업데이트 할 때 데이터를 삽입한다고 말하면 내 말입니다. 첫 번째 버전에 60 개의 질문이 있다고 가정 해보십시오. 두 번째 버전에는 40 개의 새로운 질문이 추가되었습니다. 따라서 사용자가 앱을 두 번째 버전으로 업데이트하면 새로운 40 개의 질문을 질문 테이블에 삽입해야합니다. 이것은 이전 60 개의 질문이 엉망이되어 그대로 유지되도록 추가되어야합니다.

답변

2

Gurus가 추천하는 콘텐츠를 업데이트하는 가장 좋은 방법은 무엇입니까? 버전 번호 (아마도 DB 자체에 있음)가 있고 새 앱을 처음 실행하면 새 콘텐츠가 테이블에 삽입됩니까?

사용자의 답변 결과를 저장하기 위해 데이터베이스를 사용하는지 여부에 따라 달라집니다 (이 경우 사용자의 퀴즈를 저장하는 것 외에는 "삽입"할 필요가 없을 것입니다). 응답) 또는 원본 질문을 저장하는 별도의 테이블이 있는지 여부 (일부 서버 인터페이스를 통해 새로운 질문을 제공하지 않는 경우)가 있습니다. revision 변경)하지 않는 반면

나는 개인적으로, major 또는 minor 데이터베이스 업데이트가 필요한 데이터베이스 변경을 전제로 "major. minor. revision"의 형식으로 configuration 테이블에 database_version 필드를 사용합니다. 그러나이 데이터베이스 버전 번호 시스템을 사용하여 내 번들의 데이터베이스를 Documents으로 다시 복사할지 여부를 알 수 있습니다 (그러나 데이터베이스의 구조적 변경 만 수행하고 서버 인터페이스를 통해 새 데이터를 얻는 것을 선호하지만이 방법에 따라 달라집니다 귀하의 솔루션이 설계되었습니다). 프로그래밍 방식으로 데이터베이스를 다시 복사 할 것인지 결정한 경우 Retterdesdialogs 지점으로 보존해야하는 데이터가 있으면 이전 데이터베이스의 데이터를 새 데이터베이스에 저장해야 할 수 있습니다.

삽입 쿼리를 저장하는 기본 방법은 무엇입니까? 그것들은 구현 파일에 하드 코드되어야 하는가?

어쨌든, 당신은 하드 코드 된 INSERT 진술서를 가져야한다고 생각하지 않습니다. 그래서 이것은 문제가되지 않습니다. 아래에 귀하의 의견을 수집하는 사용자가 이전에 어떤 버전을 기반으로 새로운 질문 기록을 삽입하려고 예상합니다.

는 개인적으로, 나는,

  • 앱이 기대하고 있었는지에 대한 Documents 데이터베이스 버전의 응용 프로그램 체크 버전이 번들에 데이터베이스에 최신의 그리고 최고의 질문을 넣어

    • 에 더 경사 것
    • 다른 경우 (a) 사용자의 이전 답변 저장; (b) 번들의 새 데이터베이스를 Documents으로 복사합니다. (c) 이전 데이터베이스의 응답을 기반으로 새 데이터베이스의 응답을 업데이트합니다.

    프로그래밍 방식으로 레코드를 삽입 할 수는 있지만 앱의 20 번째 릴리스에 도달하면 어떤 삶이 될지 상상해보십시오. 삽입 할 내용에 대해 많은 조건부 논리가 있어야합니다. 앱의 이전 버전은 (사용자가 이전 버전을 항상 가지고 있다고 가정 할 수 없기 때문에 ... 오래된 버전 일 수 있습니다.) 또한 각 버전이 질문을 추가, 제거 및 수정하는 것을 고려할 때 더욱 털이납니다.

    결론 현재의 질문에 대한 데이터베이스를 향하여 Documents으로 복사하고 싶습니다. 앱에 이전 답변이있는 이전 데이터베이스가 있는지 확인한 다음 수동으로 보존하십시오. (또는 다른 데이터베이스에 답변을 저장할 수도 있습니다.)

    그리고 나는 이것이 당신이 원하는 것 이상이라고 생각하지만 코어 데이터, 선호하는 iOS 영구 저장소 모델. Core Data Model Versioning and Data Migration에 설명 된대로이 마이그레이션 문제가 해결 된 것으로 보입니다. 필자는 Core Data의 마이그레이션/버전 관리 작업을 한 번도 사용하지 않았습니다.

  • +0

    자세한 답변을 주셔서 감사합니다. 테이블 구조에 대한 내 질문에 2 편집을 참조하십시오. – bizsytes

    +0

    Rob, INSERT 문과 관련하여 매우 유효한 질문이 있습니다. 명확하게하기 위해 질문의 3 번 수정을 참조하십시오. – bizsytes

    +0

    @bizsytes 따라서 내 대답이 업데이트되었습니다. 설명 주셔서 감사합니다. – Rob

    1

    내가 의사에 이런 짓을 할 것이다 : 이전 데이터베이스 이전 한 경우

    // if old database exists in documents directory 
    // get scores 
    // delete old database 
    // copy the new database from bundle to documents directory 
    // update scores in the new database 
    

    확인하려면 이름을 확인하거나 같은 somthink 수 있습니다 "== 질문 15"

    +0

    답장을 보내 주셔서 감사합니다. 나는 퀴즈 응용 프로그램이 모든 질문의 점수 (또는 답이 될 수있는/대답하지 않은 상태)를 유지해야하는 "로고 퀴즈"복제본이라고 덧붙여 야합니다. 따라서 첫 번째 버전에는 60 개의 질문이 있으며 사용자의 답변에 따라 상태가 변경됩니다. 이런 종류의 업데이트에 대한 귀하의 대답에 여전히 동일한 방법론을 제안 하시겠습니까? – bizsytes

    +0

    오케이. 그런 다음 이전 데이터베이스 (질문 == 60)가 디렉토리에 있는지 확인하고 파일에서 "업데이트 명령문"으로 기존 데이터베이스를 업데이트합니다. – Retterdesdialogs

    관련 문제