2012-12-19 2 views
1

CoreData를 사용하여 cannot create BOOL from object 오류가 발생했습니다. 이에 대해 많은 질문을 읽었습니다. 모두 동일한 결론을 이끌어 냈습니다. IB에서의 잘못된 바인딩입니다.
예를 들어 모든 바인딩을 나열 할 수있는 방법이 있습니까, 아니면 바인딩 유형을 확인하는 유틸리티 앱이 있습니까? 아마도 오류를 잡아 내거나 바인딩 된 객체의 이름을 검색 할 수있을 때 호출되는 메서드를 구현하면됩니까? 나는 차라리 누군가를 분석하는 것보다 내 자신을 해결하고자한다. .xib.잘못된 바인딩을 디버그하는 방법

답변

1

나는 이것으로 내 머리카락을 꺼내 ​​왔습니다. 수십 가지 또는 잠재적으로 수백 가지의 바인딩이있는 XIB에서는 이것이 어디에서 왔는지 알아내는 것이 거의 불가능합니다. 그러나 마침내 그것을 좁히는 방법을 찾았습니다.

난 그냥

-[NSValueBinder _observeValueForKeyPath:ofObject:context] 

에 상징적 인 브레이크 포인트를 설정하고

  • 작업은 다음과 같이 구성 : 디버거 명령, 실행할 수있는 명령으로 po $rdi을 입력합니다. 중단 점에 도달 할 때마다 자체 (즉, NSValueBinder 설명)이 인쇄됩니다. 이 ($rdi)은 x86_64 용이고 다른 아키텍처 용은 입니다.

    $7 = 4301564448 <NSTextValueBinder: 0x10064aa20>{object: <NSTextFieldCell: 0x10061eea0>, bindings: value=selection.myProperty} 
    

    마지막 하나

  • 확인은 자동으로 내가 프로그램을 실행할 때 나는 이런 식으로 뭔가를 보일 것 그 콘솔에 관련 로그를 바인딩의 무리를 얻을 이제

을 평가 한 후 계속 분명히 예외를 던지는 것입니다. 나는 보통 어떤 바인딩이 값이 직접적으로 또는 에러가 발생하기 전에 설정되어있는 다른 바인딩으로부터 어떤 뷰인지 파악할 수 있습니다. 도움이되는 또 다른 방법은 문제가되는 객체의 superview 또는 controlView을 검사하는 것입니다. 위의 예에서 po [0x10061eea0 controlView]입니다.

+0

고마워! 나는 그런 디버거 영웅이 아니므로, 나는 결코 그것을 생각하지 않을 것이다! – 11684

+0

나는이 문제를 일으킬 수있는 일반적인 문제에 대해 알고 있습니까? 내가 직접 붙여 넣은 사본을 붙여 넣기 복사했습니다. –

관련 문제