2014-11-10 2 views
0

잠시 후 특정 UIViewController를 닫으면 바로 App이 트레드 1 : 중단 점 1.1과 충돌합니다. 7.1.UIViewController를 닫은 후 크래시가 발생했습니다.

나는 해체 된보기에 배치 된 '컨테이너보기'로 문제를 좁혔습니다. 주 컨트롤러가 먼저 할당 해제되고 컨테이너보기 컨트롤러가 있지만 문제가 무엇인지 알지 못합니다. 나는 특정 인터페이스 문제에 대해 며칠을 일하고 '뒤로 돌아 가기'옵션을 사용하지 않았으므로이 문제가 언제 도입되었는지 확신하지 못합니다.

위의 설명이 매우 모호하다는 것을 알고 있지만 가능한 모든 원인을 디버그하는 방법은이 단계에서 몇 시간을 소비하므로 매우 환영 할 것입니다.

#0 0x00000001954440a8 in objc_exception_throw() 
#1 0x0000000184d05d88 in +[NSException raise:format:]() 
#2 0x0000000185b59f00 in NSKVODeallocate() 
#3 0x0000000184be5378 in CFRelease() 
#4 0x0000000184bf1938 in -[__NSArrayM dealloc]() 
#5 0x000000019545d724 in (anonymous namespace)::AutoreleasePoolPage::pop(void*)() 
#6 0x0000000184be8f94 in _CFAutoreleasePoolPop() 
#7 0x0000000184cbb750 in __CFRunLoopRun() 
#8 0x0000000184be91f4 in CFRunLoopRunSpecific() 
#9 0x000000018dd775a4 in GSEventRunModal() 
#10 0x000000018951a784 in UIApplicationMain() 
#11 0x00000001000cdc04 in main at /Users/Luuk/Documents/Xcode development/idoms-portal/iDoms/main.m:14 
#12 0x0000000195ab2a08 in start() 

편집 : 뷰 컨트롤러에 컨테이너를 연결로 좁혀 : IB의 컨테이너가 문제가 연결되면

@interface DOPrototypeViewController : UIViewController <DOContentSizeCallback> { 

    @protected 
    DOMediaPlayerHelper* _mediaPlayerHelper; 
    __weak NSString* _viewTitle; 

    IBOutlet UIBarButtonItem *_previousPageBttn; 
    IBOutlet UIBarButtonItem *_nextPageBttn; 

    __weak IBOutlet UIView* _contentContainer; 
    __weak IBOutlet UIScrollView* _scrollView; 
} 

@property (nonatomic, weak) NSString* viewTitle;; 

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewHeightConstraint; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewWidthConstraint; 

가 발생합니다. 위에서 언급했듯이 DOPrototypeViewController는 contentContainer 컨트롤러보다 먼저 언로드 된 것 같습니다. 그것은 내가 느끼는 contentContainer의 부모보기로 돌아가는 링크와 관련이 있어야합니다.

+0

충돌로 인한 오류는 무엇인가요? 관련 코드 및 관련 오류 로그 정보 게시 (스택 추적 및 오류). – rmaddy

+0

"내가 탈퇴하자마자"_You_ dealloc? 'dealloc'을 호출하면 안됩니다. – matt

+0

죄송합니다.보기 컨트롤러를 닫고 dealloc이 호출되었습니다. –

답변

0

전에 이런 종류의 충돌이있었습니다. 일반적으로 A : 더 이상 존재하지 않는 객체에 메시지가 전송됩니다. B : 선택기를 인식하지 못합니다.

스택 추적부터 살펴보십시오. 충돌이 발생한 직전의 마지막 몇 건을 확인하십시오. 이것은 일반적으로 올바른 방향으로 당신을 가리 킵니다.

또한 장애가 발생하면 여기에 충돌 로그 및 스택 추적을 게시하십시오.

+0

좋은 스택 추적을 얻는 가장 좋은 방법은 무엇입니까? 의미있는 것은 아무것도주지 않습니다. 나는 그것을 위에 게시 할 것이다. –

+0

모든 예외에 대한 중단 점을 추가하십시오. 때때로 작동합니다. – Tander

+0

나는 가지고있다. 그러나 그것은 유발하지 않는다. 이것이 내가 Xcode/Objective-C로 가장 어렵다고 생각하는 것입니다. 알아 내기가 때로는 어렵습니다. –

0

참고 문헌이었습니다. 옵저버 추가 [[self view] addObserver : self forKeyPath : @ "frame"옵션 : 0 context : nil]; 두 개의 컨트롤러에서, 그리고 하나를 고쳤을 때, 두 번째 컨트롤러를 보지 않고 그것을 제거하지 않았습니다.

관련 문제