2011-02-28 2 views
0

응용 프로그램에 이상한 버그가 발생하여 단계 실행을 사용하여 디버깅하려고합니다.누적 된 사용자 입력에 응답하는 "메시지 처리 중"기능이 있습니까?

그러나 아이폰의 것들은 내가 원했던 것처럼 동 기적으로 발생하지 않는 것 같습니다. 예를 들어이 줄을 단계적으로 넘기면. [self.view addSubview : FinndomoEmbeddedMWView.view]; 에뮬레이터에서 아무 것도 발생하지 않습니다. 프로그램 실행 만 허용하면보기가 추가되고 화면이 변경됩니다.

그래서 추측하고 있습니다. addSubview는 뷰 추가와 관련된 모든 것을 수행하지 않으며, 단지 일종의 프로세스를 시작한 다음 나중에 완료됩니다.

winapi와 ios similair에 메시지 대기열이 있는지 모르겠지만 이와 같은 것이 있어야하므로 "누적 된 메시지를 모두 처리하는"기능이 있습니다. 그때 내 addSubview 후이 함수를 호출하고 실제로 프로그램을 실행하는 때 디버깅하는 동안 에뮬레이터에서 변경 사항을보고 싶습니다.

그리고이 문제는 addSubview에서만 발생하지 않으며 이와 같은 일반적인 해결책을 원합니다.

답변

1

어제는 답을 발견했다. 보시다시피이 특정 코드는 더 이상 이벤트가 없으면 0.5 초 동안 대기하게되고 보류중인 이벤트가있는 경우 첫 번째 이벤트 만 처리 한 다음 (문서에 따라) 반환합니다.

하지만 그건 물론 피할 수 있습니다. 이것은 누구나 똑같은 것을 원한다면 단지 예일뿐입니다. 제 경우에는 중요한 이벤트가 하나 뿐이므로 제공된 스 니펫이 작동했습니다.

0

짧은 대답은 아니오입니다.

코코아는 이벤트 기반입니다.

각 앱의 핵심은 이벤트 루프입니다. 이벤트 루프를 통과 할 때마다 앱은 이벤트 대기열에 추가 된 이벤트를 처리합니다. 화면 업데이트는 그러한 이벤트 중 하나입니다.

따라서 이벤트 루프를 통과 할 때 코드가 반환 될 때까지 화면 표시가 변경되지 않습니다.

디버깅을 위해 줄 단위로 무슨 일이 일어나는지 알아 내려면 디버거의 기능을 사용하거나 코드에 NSLog 문을 추가해야합니다.

NSDate *dtr = [[NSDate alloc] initWithTimeIntervalSinceNow:0.5]; 
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:dtr]; 

이 내가 원하는 것을의 종류는 다음과 같습니다

+0

귀하의 대답은 일종의 올바른 생각이지만 완전히 정확하지는 않습니다. 특히 짧은 "아니오"부분. 내 대답을 보라. 어쨌든 응답을위한 thx – Cray

관련 문제