4월, 2025의 게시물 표시

question,image,options 간의 간격이 너무 커서 가독성이 떨어지는 문제및 각 부분의 충돌 현상 해결

문제의 원인은  아래와 같은 세 제약 조건을 수학적으로 동시에 만족할게 할수가 없었기 때문입니다.   1.이미지뷰까지 20포인트 간격   2.질문 레이블에서 옵션 스택뷰까지 10포인트 간격   3.이미지뷰에서 옵션 스택뷰까지 20포인트 간격 해결방법은: 다음과 같은 제약 조건 변수들을 선언합니다    private var questionToOptionsConstraint: NSLayoutConstraint!  private var questionToImageConstraint: NSLayoutConstraint!  private var imageToOptionsConstraint: NSLayoutConstraint! setupConstraints()  메서드에서 이 제약 조건들을 초기화하되, 아직 활성화하지 않습니다. questionToOptionsConstraint = optionsStackView.topAnchor.constraint(equalTo: questionLabel.bottomAnchor, constant: 10) questionToImageConstraint = imageView.topAnchor.constraint(equalTo: questionLabel.bottomAnchor, constant: 20) imageToOptionsConstraint = optionsStackView.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 20) displayQuestion()  메서드에서 이미지 유무에 따라 적절한 제약 조건만 활성화합니다 // 먼저 모든 잠재적 충돌 제약 조건을 비활성화 NSLayoutConstraint.deactivate([     questionToOptionsConstraint,     questionToImageCo...

SQLite를 이용할때 문제의 진행을 각 난이도별로 공유하는 문제 해결법

레벨과 퀴즈 그룹을 기본 키로 설정하여 데이터 충돌 방지 레벨과 퀴즈 그룹을 기본 키로 설정하여 데이터 충돌 방지 문제점 기존에는 레벨과 퀴즈 그룹이 정확히 구별되지 않아 새로운 진행도를 저장할 때 기존 데이터가 덮어씌워지는 문제가 있었습니다. 해결 방법 progress 테이블의 기본 키를 level 과 quizGroup 의 조합으로 설정하여, 레벨별로 진행도를 독립적으로 관리하도록 변경하였습니다. CREATE TABLE IF NOT EXISTS progress ( level TEXT, quizGroup TEXT, lastQuestionIndex INTEGER, PRIMARY KEY (level, quizGroup) ); 데이터 저장 방식 개선 업데이트 시 특정 레벨과 그룹에 대해서만 진행도 변경 saveProgress 메서드에서 WHERE 절에 level 과 quizGroup 을 포함하여 특정 레벨과 그룹에 대해서만 진행도를 변경하도록 설정하였습니다. let updateQuery = "UPDATE progress SET lastQuestionIndex = ? WHERE level = ? AND quizGroup = ?;" 진행도 조회 시 정확한 필터링 적용 let selectQuery = "SELECT lastQuestionIndex FROM progress WHERE level = ? AND quizGroup = ?;" 변경된 데이터가 없으면 새로운 데이터를 삽입하는 UPSERT 패턴 사용 if sqlite3_changes(db) == 0 { insertProgress(level: level, quizGroup: quizGroup, index: index...