Fix: App crashing on launch

Investigate and resolve the issue causing the application to crash during startup.
This commit is contained in:
gpt-engineer-app[bot]
2025-04-05 05:04:27 +00:00
parent 9f9c49c588
commit af51ba2d52
5 changed files with 220 additions and 164 deletions

View File

@@ -11,50 +11,56 @@ export const useDataInitialization = (resetBudgetData?: () => void) => {
// 모든 데이터 초기화 함수
const initializeAllData = useCallback(async () => {
// 중요: 이미 방문한 적이 있으면 절대 초기화하지 않음
const hasVisitedBefore = localStorage.getItem('hasVisitedBefore') === 'true';
if (hasVisitedBefore) {
console.log('이미 앱을 방문한 적이 있으므로 데이터를 초기화하지 않습니다.');
setIsInitialized(true);
return true;
}
console.log('첫 방문: 모든 데이터 초기화 시작');
// 현재 dontShowWelcome 값 백업
const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome');
console.log('useDataInitialization - 초기화 전 dontShowWelcome 값:', dontShowWelcomeValue);
try {
// 로그인 상태라면 클라우드 데이터도 초기화 (첫 방문 시)
if (user) {
console.log('로그인 상태: 클라우드 데이터도 초기화 시도');
await clearCloudData(user.id);
// 중요: 이미 방문한 적이 있으면 절대 초기화하지 않음
const hasVisitedBefore = localStorage.getItem('hasVisitedBefore') === 'true';
if (hasVisitedBefore) {
console.log('이미 앱을 방문한 적이 있으므로 데이터를 초기화하지 않습니다.');
setIsInitialized(true);
return true;
}
// 모든 데이터 완전히 삭제 및 초기화 (한 번만 실행)
resetAllData();
resetAllStorageData();
console.log('첫 방문: 모든 데이터 초기화 시작');
// 컨텍스트 데이터 리셋 (필요한 경우)
if (resetBudgetData) {
resetBudgetData();
// 현재 dontShowWelcome 값 백업
const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome');
console.log('useDataInitialization - 초기화 전 dontShowWelcome 값:', dontShowWelcomeValue);
try {
// 로그인 상태라면 클라우드 데이터도 초기화 (첫 방문 시)
if (user) {
console.log('로그인 상태: 클라우드 데이터도 초기화 시도');
await clearCloudData(user.id);
}
// 모든 데이터 완전히 삭제 및 초기화 (한 번만 실행)
resetAllData();
resetAllStorageData();
// 컨텍스트 데이터 리셋 (필요한 경우)
if (resetBudgetData) {
resetBudgetData();
}
// 초기화 후 dontShowWelcome 값 확인
const afterResetValue = localStorage.getItem('dontShowWelcome');
console.log('useDataInitialization - 초기화 후 dontShowWelcome 값:', afterResetValue);
// 값이 유지되지 않았다면 복원
if (dontShowWelcomeValue && afterResetValue !== dontShowWelcomeValue) {
console.log('useDataInitialization - dontShowWelcome 값 복원:', dontShowWelcomeValue);
localStorage.setItem('dontShowWelcome', dontShowWelcomeValue);
}
console.log('모든 데이터 초기화 완료');
return true;
} catch (error) {
console.error('데이터 초기화 중 오류 발생:', error);
return false;
}
// 초기화 후 dontShowWelcome 값 확인
const afterResetValue = localStorage.getItem('dontShowWelcome');
console.log('useDataInitialization - 초기화 후 dontShowWelcome 값:', afterResetValue);
// 값이 유지되지 않았다면 복원
if (dontShowWelcomeValue && afterResetValue !== dontShowWelcomeValue) {
console.log('useDataInitialization - dontShowWelcome 값 복원:', dontShowWelcomeValue);
localStorage.setItem('dontShowWelcome', dontShowWelcomeValue);
}
console.log('모든 데이터 초기화 완료');
return true;
} catch (error) {
console.error('데이터 초기화 중 오류 발생:', error);
console.error('initializeAllData 함수 실행 중 오류:', error);
setIsInitialized(true); // 오류가 발생해도 앱을 사용할 수 있도록 초기화 완료로 설정
return false;
}
}, [resetBudgetData, user]);
@@ -102,21 +108,26 @@ export const useDataInitialization = (resetBudgetData?: () => void) => {
// 데이터 초기화 실행 - 첫 방문시에만
useEffect(() => {
if (!isInitialized) {
// 이미 방문한 적이 있는지 체크 (이미 있다면 초기화하지 않음)
const hasVisitedBefore = localStorage.getItem('hasVisitedBefore') === 'true';
if (hasVisitedBefore) {
console.log('이미 방문 기록이 있어 초기화를 건너뜁니다.');
setIsInitialized(true);
} else {
initializeAllData().then(result => {
setIsInitialized(result);
});
try {
if (!isInitialized) {
// 이미 방문한 적이 있는지 체크 (이미 있다면 초기화하지 않음)
const hasVisitedBefore = localStorage.getItem('hasVisitedBefore') === 'true';
if (hasVisitedBefore) {
console.log('이미 방문 기록이 있어 초기화를 건너뜁니다.');
setIsInitialized(true);
} else {
initializeAllData().then(result => {
setIsInitialized(result);
});
}
}
// 첫 방문 여부 체크용 키 설정 (항상 true로 설정)
localStorage.setItem('hasVisitedBefore', 'true');
} catch (error) {
console.error('데이터 초기화 useEffect 내 오류:', error);
setIsInitialized(true); // 오류 발생해도 앱을 사용할 수 있도록 초기화 완료로 설정
}
// 첫 방문 여부 체크용 키 설정 (항상 true로 설정)
localStorage.setItem('hasVisitedBefore', 'true');
}, [isInitialized, initializeAllData]);
return {