0

我是 Objective-C 开发的新手,正在寻找一种以编程方式从场景中改变的方法。我已经搜索了很多,但我不断收到错误。谁能告诉我我做错了什么?任何帮助将不胜感激。到目前为止我的代码:

- (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。提前致谢!马蒂斯

4

2 回答 2

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];
    }
}

此答案中假设了几件事,在您更新问题之前,此答案是基于假设的。首先Level2它是UIViewController什么?你得到什么错误?由于您的原始代码应该呈现视图控制器,所以我假设当它试图呈现它时,您正在Level2控制器中做一些破坏它的事情,因为如果Level2控制器中出现问题,那么它将显示在这一行[self presentViewController:secondLevel animated:NO completion:Nil];我也会让它变得生动,就好像你说不一样,这使这modalTransitionStyle毫无意义。

如果您更新您的问题,我将尝试改进此答案,但在您这样做之前,我无能为力。如果您的应用程序在崩溃时退出,则使用Exception Breakpoint在引发异常时停止。

编辑

你没有打电话给[self retryOrNextLevel]你想打电话给[self retryOrNextLevel:myButton]你没有打电话给正确的方法。无论您在哪里调用它,都缺少参数,因此您丢失了:myButton。你的方法是

- (IBAction)retryOrNextLevel:(id)sender;

并不是

- (IBAction)retryOrNextLevel; 

注意 sender 参数。

为了确保班级对您做出回应,retryOrNextLevel您可以这样做

if([self respondsToSelector:@selector(retryOrNextLevel:)] {
    // Code for calling the method.
}
于 2013-06-20T13:43:42.357 回答
0

我找到了答案!错误是因为我忘记声明某些内容,而当我触摸按钮时没有发生任何事情的原因是因为我没有在视图控制器之间拖动 segue。该视频回答了我的问题:http ://www.youtube.com/watch?v=XApYtAlRDVE 。

于 2013-06-21T08:30:36.047 回答