2013-06-20 4 views
0

Objective-C 개발을 처음 접하면서 프로그래밍 방식으로 장면을 바꿀 수있는 방법을 찾고 있습니다. 많이 검색했지만 오류가 계속 발생합니다. 누구나 내가 뭘 잘못하고 있다고 말할 수 있습니까? 도움이 될 것입니다. 지금까지 내 코드 :Xcode 장면 전환 방법

- (IBAction)retryOrNextLevel:(id)sender { 
    if (retryInteger == 1){ 
     [self viewDidLoad]; 
    } 
    if (retryInteger == 2){ 
    Level2 *secondLevel = [[Level2 alloc] initWithNibName:@"Level2" bundle:nil]; 
    [secondLevel setTitle:@"Level2"]; 
    secondLevel.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentViewController:secondLevel animated:NO completion:Nil]; 
    } 
} 

retryInteger는 수준에 실패한 경우 2 당신이 게임의 수준을 완료 한 경우 1로 설정하는 정수입니다. 두 가지 일에 동일한 버튼을 사용합니다. 레벨에 실패하면 레벨을 재생할 수 있고 레벨을 완료하면 다음 레벨로 이동할 수 있습니다. Level2는 UIViewController입니다. 미리 감사드립니다. Matis

+0

에 오신 것을 환영합니다.약간의 충고는 당신이'xcode'를 사용하고 있다고해서 xcode 태그를 사용할 수 있다는 것을 의미하지는 않는다. 'xcode' 태그는'xcode IDE '자체의 문제점을 위해 예약되어 있습니다. 또한이 질문은'switch-statements'와는 아무런 관련이 없으므로이 태그를 사용하지 마십시오. https://www.google.co.uk/search?q=switch+statements+in+objective- 어떤 사람인지 모른다면 c & ie = utf-8 & oe = utf-8 & aq = t & rls = org.mozilla : ko-US : official & client = firefox-a – Popeye

+2

무엇이 오류입니까? 그래도 viewDidLoad를 수동으로 호출하면 안됩니다. –

+0

retryOrNextLevel 버튼을 누르면 앱이 종료되고 이유를 알 수 없습니다. – MatisDS

답변

0

할 수있는 클래스가 retryOrNextLevel에 응답 있는지 확인하십시오! 내가 뭔가를 선언하는 것을 잊었 기 때문에 오류가 발생했습니다. 버튼을 눌렀을 때 아무 일도 일어나지 않았습니다. 뷰 컨트롤러 사이에 꽁지 (segue)를 드래그하지 않았기 때문입니다. 이 비디오는 내 질문에 대답했습니다 : http://www.youtube.com/watch?v=XApYtAlRDVE.

+0

'[Level1 retryOrNextLevel] : 인스턴스 0x1f873ce0에 보낸 인식 할 수없는 선택자 '는 존재하지 않는 메소드를 호출하고 있음을 의미합니다. 그래서 당신은 그 오류를 가져 오기 위해 무언가를 호출했을 것입니다. 아직도 해결책을 찾은 것을 기쁘게 생각합니다. – Popeye

1

먼저 을 추측 할 때 [self viewDidLoad];을 자동으로 호출해야합니다.

두 번째 retryInteger 란 무엇입니까? 이 대답은 사용자가 이미이 버튼을 누르거나 무언가를 한 경우 설정 한 값입니다.

- (IBAction)retryOrNextLevel:(id)sender { 
    if (retryInteger == 1){ 
     [self callSomeMethodThatIsntVIEWDIDLOAD]; 
    } 
    if (retryInteger == 2){ 
     Level2 *secondLevel = [[Level2 alloc] initWithNibName:@"Level2" bundle:nil]; 
     [secondLevel setTitle:@"Level2"]; 
     // Pushing onto a navigationController would seem more logical (Would recommend) 
     // [self.navigationController pushViewController:secondLevel animated:YES]; 
     // Otherwise you want this 
      [self presentViewController:secondLevel animated:YES completion:nil]; 
    } 
} 

가이 답변에 가정 몇 가지이며, 당신이 당신의 질문을 업데이트 할 때까지이 답변은 가정을 기반으로합니다

그래서 우리는 당신의 코드와 함께 무엇을 할 수 있는지 볼 수 있습니다. 우선 Level2UIViewController입니까? 어떤 오류가 발생하고 있습니까? 원래 코드는 뷰 컨트롤러를 제공해야하므로, 컨트롤러를 제시하려고 시도 할 때 Level2 컨트롤러에서 뭔가를하고 있다고 가정 할 것입니다. 컨트롤러가 잘못되었을 때 컨트롤러가 Level2 컨트롤러에 나타나면이 라인에 표시됩니다 [self presentViewController:secondLevel animated:NO completion:Nil]; 나는 또한 그것이 당신이 무의미하다고 말한 것처럼 움직이는 것처럼 만들어서 modalTransitionStyle을 무의미하게 만든다.

질문을 업데이트하면이 대답을 개선하려고 노력하지만, 그렇게 할 때까지 할 수있는 일이 많지 않습니다. 크래시에서 앱이 종료되면 예외가 발생하면 중지 될 Exception Breakpoint을 사용합니다.

편집

당신은 [self retryOrNextLevel]를 호출하지 않는 당신은 당신이 올바른 메소드를 호출하지 [self retryOrNextLevel:myButton]를 호출되고 싶어요. 어느 곳에서든 호출하면 매개 변수가 누락되어 :myButton이 누락됩니다. 귀하의 방법은

- (IBAction)retryOrNextLevel:(id)sender; 

하지

- (IBAction)retryOrNextLevel; 

참고 보낸 사람 매개 변수입니다.

는 내가 대답을 발견

if([self respondsToSelector:@selector(retryOrNextLevel:)] { 
    // Code for calling the method. 
}