2016-07-27 1 views
1

때때로 프로젝트에 코드를 작성한 후 디버거가 내 애플리케이션을 일시 중지하고 lldb을 콘솔에 넣고 계속 진행할 수없는 것으로 나타났습니다. NSZombies을 사용했고이 메시지를 받았습니다 : "-[NSThread threadDictionary]: message sent to deallocated instance". 나는 주변을 둘러 보았지만 어떤 원인을 찾을 수 없었습니다. 백 트레이스를 인쇄하면 다음과 같이 표시됩니다.오류 받기 "- [NSThread threadDictionary] : 할당 해제 된 인스턴스로 전송 된 메시지"

thread #17: tid = 0x7886f, 0x0000000180f7ab40 CoreFoundation`___forwarding___ + 700, stop reason = EXC_BREAKPOINT (code=1, subcode=0x180f7ab40) 
frame #0: 0x0000000180f7ab40 CoreFoundation`___forwarding___ + 700 
frame #1: 0x0000000180e78c5c CoreFoundation`_CF_forwarding_prep_0 + 92 
frame #2: 0x00000001860536dc UIFoundation`+[NSStringDrawingTextStorageSettings threadSpecificStringDrawingTextStorageSettings:] + 64 
frame #3: 0x000000018604900c UIFoundation`+[NSString(NSStringDrawing) typesetterBehavior] + 32 
frame #4: 0x000000018604a6d4 UIFoundation`__NSStringDrawingEngine + 244 
frame #5: 0x000000018604a4d0 UIFoundation`-[NSString(NSExtendedStringDrawing) drawWithRect:options:attributes:context:] + 176 
frame #6: 0x00000001860eb564 UIKit`-[UILabel _drawTextInRect:baselineCalculationOnly:] + 3856 
frame #7: 0x000000018615e8f0 UIKit`-[UILabel drawTextInRect:] + 544 
frame #8: 0x000000018615e678 UIKit`-[UIView(CALayerDelegate) drawLayer:inContext:] + 368 
frame #9: 0x0000000183a92230 QuartzCore`-[CALayer drawInContext:] + 260 
frame #10: 0x0000000183a7c8b4 QuartzCore`CABackingStoreUpdate_ + 2432 
frame #11: 0x0000000183b94360 QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 52 
frame #12: 0x0000000183a7ba90 QuartzCore`CA::Layer::display_() + 1368 
frame #13: 0x0000000183a5d7b0 QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 228 
frame #14: 0x0000000183a5d49c QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 44 
frame #15: 0x0000000183a5cac0 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 252 
frame #16: 0x0000000183a5c820 QuartzCore`CA::Transaction::commit() + 500 
frame #17: 0x0000000183a8bbd4 QuartzCore`CA::Transaction::release_thread(void*) + 236 
frame #18: 0x0000000180bda1e0 libsystem_pthread.dylib`_pthread_tsd_cleanup + 584 
frame #19: 0x0000000180bd9d58 libsystem_pthread.dylib`_pthread_exit + 136 
frame #20: 0x0000000180bd953c libsystem_pthread.dylib`_pthread_wqthread + 1296 
frame #21: 0x0000000180bd9020 libsystem_pthread.dylib`start_wqthread + 4 

무슨 일이 일어나는지 알아 내면 도움이 될 것입니다.

+1

제 생각에는 백그라운드 스레드에서 UI 업데이트가 발생하는 것입니다. 코드를 검토하고 UI 요소를 건드린 내용이 주 스레드로 이동했는지 확인하는 것이 좋습니다. –

답변

0

약한 참조가있는 라벨을 발견했기 때문에 문제가 발견되었습니다. 나는 그것을 오랫동안 숨기고 있었고 쓰레기 수거가 청소 된 것으로 보인다. 그래서 데이터를 보내려고하면 이미 dealloc이되었습니다.

-3

어떤 클래스 및 클래스 객체의 인스턴스 메소드를 호출하는 곳도 nil입니다.

+1

Nothing으로 보내는 것이 좋습니다. 할당 취소 된 non-nil 참조로 보내는 것은 아닙니다. – Avi