0

所以,这就是问题所在。我对 iOS 编程比较陌生,并且我已经承担了一个巨大的项目。

我正在开发一个具有多个级别的游戏,这些级别基本上遵循相同的模式,但具有不同的精灵图像和值,我只是为了速度而决定在 IB 中布置所有级别(不一定是最佳实践,我知道,但是和我一起工作)。每个“关卡”都有自己的视图控制器,类似于“FireLevel1ViewController”、“FireLevel2ViewController”等。所有这些视图控制器都继承自我创建的名为“GameController”的 UIViewController 的自定义子类。

我的问题是,当我在测试设备上打开每个关卡时,GameController 的 viewDidLoad 会在我的子类控制器的 init 或 viewDidLoad 方法之前被调用,因此我的关卡图像/值都没有分配给超类属性。具体来说,我有一个应该在关卡开始时隐藏的暂停菜单(我在 GameController 的 viewDidLoad 中执行 setHidden),但由于 GameController 的 viewDidLoad 在 FireLevel1 有机会将正确的 IB 属性与 PauseMenu 相关联之前运行,因此 GameController 只是隐藏一个空视图,实际的 PauseMenu 永远不会被隐藏。

我可能在这里遇到了多个问题,但大多数情况下我认为我并没有真正理解如何对 UIViewController 的子类进行子类化,以及如何让第二个子类的属性/值/图像在第一个子类的方法中工作。

非常感谢您的帮助!我希望这个问题是有道理的......

游戏控制器代码:

@implementation GameController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:pauseMenu];
    [pauseMenu addSubview:helpMenu];

    //Hides the pause and help menus until their respective buttons are pressed
    [pauseMenu setHidden:YES];
    [helpMenu setHidden:YES];
    isPaused = NO;
}

FireLevel1Controller 的代码:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if(self)
    {
           theMainview = mainview;
           theScene = scene;
           theBG = bg;
           theHudView = hud;
           thePauseView = pauseMenu;
           theHelpView = helpMenu;
    }

return self;
}


-(void)viewDidLoad
{

    [super viewDidLoad];
    firstTurret = [[StationaryEnemy alloc]init:turretImage1 baseView:base1];
    secondTurret = [[StationaryEnemy alloc]init:turretImage2 baseView:base2];

    NSLog(@"I'm in view did load");

}
4

2 回答 2

0

啊,我想通了——我不小心否定了我的变量。我应该一直在做 mainview = theMainview; 而不是 theMainview = mainview - 我只是将它们全部分配为零。我还将它们全部从 init 中移出到 viewDidLoad 中,并将 [super viewDidLoad] 移到它们下面,现在它可以完美运行了!

于 2012-08-07T20:24:20.720 回答
0

你试过用viewWillAppear吗?应该在所有可见的 UI 元素都已初始化后调用该方法。

于 2012-08-06T22:59:12.020 回答