2011-01-25 5 views
0

아이폰을 놀래켜 본 적이 없지만 완전히 작동하는 iPhone 앱이 있습니다. 사용자가 iPhone을 똑바로보고있는 것으로 가정합니다. 내가 전화를 회전 함께 놀러, 그리고 그렇게하기 위해서는 것, 나는 아주 간단한 일을했다 :iPhone 회전 및 뷰 변경

-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration { 
    NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation); 

    if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) 
     tableView.frame = CGRectMake(0, 0, 480, 320); 
    else 
     tableView.frame = CGRectMake(0,73,320,390); 


} 

하고 난 :

나는 내보기 컨트롤러에 다음 코드를 추가 BAD_ACCESS 오류가 발생했습니다. 보기로드가 전혀 표시되지 않습니다. 그렇다면 문제는 무엇이며 어떻게 willRotate 메서드를 제대로 구현하여 전화가 회전 할 때 모든 구성 요소의 크기를 조정할 수 있습니까?

+0

너무 많은 코드가 아닙니다. EXC_BAD_ACCESS는 더 이상 존재하지 않는 객체에 액세스하여 발생하는 오류입니다. 당신의 콘솔에 무엇이 있습니까? 언제 정확히 발생합니까? – Icky

답변

3

충돌이 회선에 의해 야기된다

NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation); 

orientationenum 값이며, 따라서 형식 지정자 %i하지 %@이어야한다.

회전을 지원하는 가장 간단한 방법은 구현하는 것입니다 : 당신이 지원하고자하는 방향에 대한

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

반환 YES. 이 방법에서는 크기를 조정하지 마십시오. 스트럿과 스프링 뷰를 사용하여 대체 회전을 위해 올바르게 크기를 조정하고 위치를 변경하십시오. 로깅 문자열

NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation); 

서식 지정자 %@NSString 포인터에 대한 자리 표시 자입니다 :

+1

iOS 6부터, shouldAutorotateToInterfaceOrientation :'은 더 이상 사용되지 않습니다; 이제'shouldAutorotate'를 사용하십시오 : http://bit.ly/1iu7EOn – piperchester

0

그것은 로깅 코드에 문제가 있습니다. 앱이이 시점에 도달하면 orientation 변수를보고 NSString 인스턴스로 간접 참조하려고 시도하고 포인터가 아니기 때문에 충돌합니다. 이는 enum 값입니다.

+1

'% @'는 단지'NSString'을위한 자리 표시자가 아닙니다. 그것은'NSObject'와 심지어'CFTypeRef'와도 작동합니다. –