2012-01-19 2 views
3

간단한 컨트롤러와 iPad보기를 사용하여 프로그래밍 방식으로 만든 스토리 보드 (iOS 5에서만 사용함)가 있습니다. 제스처 인식기가 필요하고 추가했습니다. 메시지 전송 그것은 내가 뭐하는 거지 간단한 것이어야 0x238580제스처 인식기 및 스토리 보드가있는 EXC_BAD_ACCESS

할당이 해제 된 인스턴스 : - [DOiPadStoryboardViewController handleSliding이 :]

*** : 앱로드와 나는 gustier을 할 때하지만 난 EXC_BAD_ACCESS 얻을 잘못된. 컨트롤러가 왜 할당 해제됩니까?

난 다음 코드 스토리 보드를 생성 :

if (isIOS5) { 
    // iOS 5 with storyboard 
    UIViewController *viewControler = nil; 
    if([self isiPad]){ 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPadStoryboard" bundle: [NSBundle mainBundle]]; 
     viewControler = [storyboard instantiateInitialViewController]; 
    } else { 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard" bundle: [NSBundle mainBundle]]; 
     viewControler = [storyboard instantiateInitialViewController]; 
    } 
    [self.window addSubview:viewControler.view]; 
} 

제스처 인식기 메인 뷰에 접속되고 IBAction를 뷰 컨트롤러이다. 다음과 같이 스토리 보드 본다 (그러나 이것은 아무것도 추가 할 경우 확실하지) : Storyboard

를이는 팬 제스처 인식기입니다 : Gesture properties

마지막으로 'BT'콘솔 출력 :

#0 0x37d2b8a0 in ___forwarding___() 
#1 0x37c86680 in __forwarding_prep_0___() 
#2 0x318d2f06 in _UIGestureRecognizerSendActions() 
#3 0x31864c1c in -[UIGestureRecognizer _updateGestureWithEvent:]() 
#4 0x31a90508 in ___UIGestureRecognizerUpdate_block_invoke_0541() 
#5 0x317dfd68 in _UIGestureRecognizerApplyBlocksToArray() 
#6 0x317de8b6 in _UIGestureRecognizerUpdate() 
#7 0x317eb3cc in _UIGestureRecognizerUpdateGesturesFromSendEvent() 
#8 0x317eb20e in -[UIWindow _sendGesturesForEvent:]() 
#9 0x317eaddc in -[UIWindow sendEvent:]() 
#10 0x317d14ec in -[UIApplication sendEvent:]() 
#11 0x317d0d2c in _UIApplicationHandleEvent() 
#12 0x37a57df2 in PurpleEventCallback() 
#13 0x37cfd552 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__() 
#14 0x37cfd4f4 in __CFRunLoopDoSource1() 
#15 0x37cfc342 in __CFRunLoopRun() 
#16 0x37c7f4dc in CFRunLoopRunSpecific() 
#17 0x37c7f3a4 in CFRunLoopRunInMode() 
#18 0x37a56fcc in GSEventRunModal() 
#19 0x317ff742 in UIApplicationMain() 
#20 0x00003050 in main (argc=1, argv=0x2fdffaa8) 

답변

2

세트 뷰 컨트롤러의 :

@synthesize viewController; 

이 또한 할당 변경 :하는 .m 파일 추가에서

@property (retain) UIViewController *viewController; 

을 하위보기로보기를 추가하는 대신 창의 루트보기 컨트롤러가 될 수 있습니다. 이는 Apple Si에서 더 이상 사용되지 않으며 권장하지 않습니다. nce 당신은 뷰 컨트롤러 계층 구조에서보기 계층 구조를 분리하고 있습니다. 결국 뷰 콜터가 회전 콜백을받지 못하는 등의 불쾌한 버그를 일으킬 것입니다.

그런데보기 컨트롤러는 창에 의해 유지되고 더 이상 충돌하지 않습니다.

+0

감사합니다. –

+0

죄송합니다 다시 설명해 주시겠습니까? 나는 당신이 무엇을 의미하는지 잘 이해하지 못했습니다 ... –

+0

@ChrisBraunschweiler Apple의'UIWindow' 클래스 참조 문서를 확인하십시오. 'rootViewController' 속성을 찾으십시오. – Danra

1

단지 viewControler를 (유지 된) 속성으로 만듭니다. 코드 예제에서보기 컨트롤러를 유지하지 않습니다.

.H 파일의 속성 만들기 :

self.viewControler = [storyboard instantiateInitialViewController]; 
+0

좋아, 그럼 어리석은 질문 (나는 주로 자바 프로그래머이다.) 나는 그 객체를받을 때 어떻게 하는가? 그 코드에서 나중에 소유하고있는 객체를 만들 때 나는 보통 그렇게한다. –

+0

답변을 업데이트했습니다. – diederikh

+0

나는 그와 같은 것이 작동 할 것이라고 생각했지만, 같은 오류가 발생합니다. –

관련 문제