2012-03-18 2 views
0

Xcode 4.2.1 (ARC 사용 가능 프로젝트)에서 문제의 근원까지 추적 할 수없는 이상한 예외가 나타납니다.iOS - 이상한 예외

2012-03-18 22:19:32.855 Project[14225:707] +[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4 
2012-03-18 22:19:32.859 Project[14225:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4' 

UIPickerTableViewTitledCell 무엇인가

이 예외가 보이는 무엇인가? UIPickerView를 사용할 내부 클래스가 있다고 가정합니다. 그러나 나는 내 프로젝트에서 그 클래스를 참조하지 않는다.

내 응용 프로그램은 각 탭에 탐색 컨트롤러가있는 Tab Bar 응용 프로그램으로 설정되며이 특정 탭에는 tableview 및 pickerview가 있습니다.

+0

앱을 다시 실행하고 'PO'다음에 선택기에 응답하지 않는 것으로 표시된 인스턴스를 사용하십시오. 네가 기대했던 수업인가? 이 클래스는'isEqualToString :'을 구현합니까? 아니면 객체의 속성을 가져 와서 문자열을 검사해야합니까? – theMikeSwan

+0

'po'를 실행하면'UIPickerTableViewTitledCell'이됩니다 ... –

+0

어디서나 해당 클래스의 문서를 볼 수는 없지만 문자열이 아니지만 해당 제목에 문자열 속성이 있다고 생각합니다. 필자는 정말 피커 뷰로 작업하지는 않았지만, 실제로 말할 수있는 것은 타이틀 프로퍼티 또는 비슷한 것을 찾는 것입니다. 그것이 프라이빗 클래스라면 염두에 두라. 애플은 앱을 직접 (예를 들어 전화로) 사용하기 위해 앱을 거부 할 것이다. – theMikeSwan

답변

3

과도하게 출시 된 개체가있는 것 같습니다. 프리 ARC 코드에서 릴리스가 너무 많이 호출되면 알 수 있습니다. 이 코드는 NSString이 isEqualToString을 보내도록 찾고있는 것처럼 들리지만 이미 해제 된 NSString을 얻는 대신 UIPickerTableViewTitledCell의 임의의 인스턴스를 가져옵니다.

좀비를 사용할 수 있습니다. Xcode 4.2.1에서는 메뉴 항목 Product > Edit Scheme에서 찾을 수 있습니다. Diagnostics 탭으로 이동하십시오. 그런 다음 Enable Zombie Objects 체크 박스가 있습니다. 이렇게하면 과도하게 방출 된 물체가 좀비가됩니다. 그래서 어떤 물체가 충돌을 일으키는 지 정확히 파악할 수 있습니다.

이에 대한 자세한 정보는 Apple doc Technical Note TN2239: iOS Debugging Magic을 참조하십시오. 전체 문서는 훌륭하지만 "좀비"섹션을 읽어 보면 시작할 수 있습니다. 와 "좀비들!"

+0

사실입니다. 나는 몇몇 이상한 인식 할 수없는 선택자 예외를 최근에 만났다. 객체가 너무 자주 공개되었으므로 다른 객체보다 먼저 할당 된 객체를 선택했습니다. 밖에 재미있는 메모리 관리. –

+0

위 출력은'좀비 객체 사용 '이 선택되었을 때 얻은 결과입니다. –