2013-06-20 122 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是设置为1,如果你失败的水平,2,如果你已经完成了游戏的级别的整数。我使用相同的按钮来处理两件事情:如果您的关卡失败了,您可以重播关卡,当您完成关卡时,您可以进入下一关。 Level2是一个UIViewController。 在此先感谢! 马蒂斯

+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:zh-CN:official&client = firefox-a如果您不确定是什么人 – Popeye

+2

您得到的错误是什么?你不应该手动调用viewDidLoad。 –

+0

当我按下retryOrNextLevel按钮时,我的应用程序退出,我不知道为什么。 – MatisDS

回答

0

我已经找到了答案!这个错误是因为我忘了声明一些东西,当我按下按钮时什么也没有发生,原因是我没有在视图控制器之间拖拽一个segue。本视频回答了我的问题:http://www.youtube.com/watch?v=XApYtAlRDVE

+0

'[Level1 retryOrNextLevel]:无法识别的选择器发送到实例0x1f873ce0'意味着你正在调用一个不存在的方法。所以你一定是在打电话来得到那个错误。很高兴你找到了解决方案。 – Popeye

1

首先,你永远不应该打电话[self viewDidLoad];这是自动调用时,你会猜你的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; 

注意发件人的参数。

要确保该类回应retryOrNextLevel你可以做

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