2011-08-17 6 views
3

디버깅을 위해 충돌 한 시점을 알아야하는 응용 프로그램이 있습니다. 응용 프로그램을 닫으면 대리자에서 - (void)applicationWillTerminate:(UIApplication *)application을 호출합니다.applicationWillTerminate가 충돌시 호출됩니다.

응용 프로그램이 고장 났을 때 나는 그 라인을 호출해서는 안되지만, 무엇인가 이유가있다. (I 응용 프로그램이 충돌하지 않은 경우 NSUserDefaults에 값을 설정하지만이 충돌 한 경우에 일을 변경하지 않습니다 거기에 코드가 있습니다.)

몇 가지 세부 사항 : - (void)applicationDidBecomeActive:(UIApplication *)application가 호출 될 때,의 NSUserDefaults 주요 내 프로그램이 YES로 설정됩니다. - (void)applicationWillTerminate:(UIApplication *)application이 호출되면 동일한 키가 NO로 설정됩니다. 다음 실행시 응용 프로그램은 동일한 키가 YES 또는 NO로 설정되어 있는지 확인합니다. 계획은 열쇠가 YES인지 확인하는 것이 었습니다. 그렇다면 열쇠가 올바르게 닫히지 않았 음을 의미합니다 (즉, 추락했습니다).

크래시가 발생했는지 여부를 확인하려면 어떻게해야합니까?

+0

정확히 어떤 종류의 충돌이 발생합니까? 낮은 기억을 말하는거야? – sidyll

답변

5

NSUserDefaults에 쓰는 것이 반드시 해당 값을 디스크에 동기화하지는 않습니다. 일반적으로 NSUserDefaults은 30 초마다 변경 사항을 디스크에 동기화합니다. 무슨 일이 일어나면 YESNSUserDefaults에 저장 한 다음 디스크에 동기화하기 전에 충돌하므로 다음에 다시 실행하면 NO으로 다시 돌아옵니다. 이 문제를 해결하기 위해 YES 값을 저장 한 후 -[NSUserDefaults synchronize]을 호출하면 디스크 동기화가 즉시 수행됩니다.

참고로 -synchronize은 비교적 비싸기 때문에 값을 디스크에 즉시 기록해야하는 경우에만 사용해야합니다. 귀하가 설명하는 사례가 자격을 얻습니다. 다른 경우는 거의 없습니다.

+0

이것은 그 것이다! 감사! 나는 그것이 가능할 때 몇 분 안에 대답을 받아 들일 것이다. – Baub

+0

그것은 5 년 후 여전히 훌륭한 답변입니다 .. 감사합니다 .. –

관련 문제