2011-03-09 1 views
0

코드에서 아무 곳이나 설정 한 중단 점을 사용하여 빌드하고 디버깅 할 때 시뮬레이터 창이 모두 검은 색으로 유지되고 내 레이블이 보이지 않습니다. 중단 점을 설정하지 않고 빌드하고 디버깅 할 경우 내 레이블을 볼 수 있습니다. 누구든지 도와 줄 수 있습니까? 나는 Xcode 디버거의 라인을 단계별로 밟아 내 라벨, 버튼 등에 시계 변경 사항을 적용하고 싶습니다. 그건 그렇고, 내 프로그램은 코드를 사용하여 동적으로 만들고 UILabel을 메인 뷰에 배치합니다.디버그 중 중단 점을 사용할 때 왜 iPad 시뮬레이터에서 내 레이블을 볼 수 없습니까?

다른 모든 사람들이 중단 점을 사용하여 디버깅하는 동안 해당 레이블과 단추를 볼 수 있습니까? 나는 iOS (4.2) 개발과 Objective-C에 익숙하지 않다.

답변

0

중단 점을 사용하여 실행을 중지하는 동안에는 UI가 업데이트되지 않습니다. 그래서 당신은 이런 방식으로 디버깅 할 수 없습니다. 변수와 속성을 볼 수는 있지만 예를 들어, 디버거에서 라벨을 설정 한 후에 text 라벨의 속성이 변경되었는지 확인할 수는 있지만 실행을 계속할 때까지는 UI가 업데이트되지 않습니다.

0

중단 점을 설정할 때 화면이 검은 색 인 이유를 알아 보려면 실행 로그를 게시해야합니다. 제 생각에는 당신이 무승부 사이클 전에 브레이크 포인트를 설정하고 있다는 것입니다, 그러나 당신의 질문은 그것에 대해 약간 불분명합니다.

코드를 단계별로 진행하면서 레이블의 변경 사항을 보는 목표는 도면 루프에 대한 오해를 나타냅니다. 코드가 실행되면 레이블 데이터 구조가 변경되고 레이블에 setNeedsDisplay:이 호출됩니다 (일반적으로 필요하면 자동으로 호출됩니다). 다음 드로잉주기가 발생하면 표시되도록 표시된 표시가 다시 그려집니다. 이로 인해 drawRect:이 호출되지만 여전히 화면에 그려지지 않습니다. 그냥 버퍼에 그립니다. drawRect: 호출이 모두 완료되면 버퍼가 화면에 동기화됩니다.

label.text = @"newstuff"과 같은 방법에 중단 점을 설정할 수 있고이 단계를 건너 뛰면 화면에 표시되는 것을 볼 수있는 것은 아닙니다.

+0

정보 주셔서 감사합니다. 따라서 뷰 윈도우가 디버거를 통해 한 단계 씩 진행될 때 시각적 변경 사항을 업데이트 할 수 없다면 실제로 발생하는 시각적 업데이트를 시작할 수있는 코드에서 메서드 호출을 삽입 할 수있는 방법이 있습니까? 내가 원할 때? – user651903

+0

아니요. 화면에 대한 업데이트를 제어하지 않습니다. 이벤트 루프의 모든 필수 업데이트는 표시 전에 함께 합성됩니다. 다른 변경 사항으로 인해 변경이 취소 될 수 있습니다. 예를 들어, 레이블을 변경할 수는 있지만 레이블이 화면에서 제거되거나 불투명 한보기가 그것을 어둡게 할 수 있습니다. 도면 시스템은 불필요한 그리기/합성 단계를 피하기 위해 최적화되어 있습니다. 이것을 우회하면 드로잉 성능이 저하됩니다. –

+0

여기에 주제에 관한 비슷한 질문이 있습니다. http://stackoverflow.com/questions/1503761/what-is-themost-robust-way-to-force-a-uiview-to-redraw/1503828# 1503828 –

0

반복적으로 발생할 수있는 중단 점을 클릭 한 후 작은 "계속"화살표를 누르십시오. Xcode 디버그 창에는 더 큰 계속 화살표가 있습니다. 계속하기 전까지는 시뮬레이트 된 OS가 UI 실행 루프에서 시간을 가져 와서 창을 업데이트하지 않습니다.

관련 문제