0

私は次のコードを持っています:

    - (void)startGameWithBlock:(void (^)(Game *))block
{
    GameViewController *gameViewController = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
    gameViewController.delegate = self;

    [self presentViewController:gameViewController animated:NO completion:^
    {
        Game *game = [[Game alloc] init];
        gameViewController.game = game;
        game.delegate = gameViewController;
        block(game);
    }];

}

GameViewControllerを割り当てると、それが表示され、Gameオブジェクトが割り当てられます。最後に、ブロックを呼び出してゲームタイプ固有の初期化を行います

ブロックについて読みましたが、gameviewcontroller loadViewの後にブロックが起動されます。コードを現在と同じように実行したいのですが、ビューが表示されていない場合は、ヘルプを参照してください。

4

1 に答える 1

0

私の理解が正しければ、あなたはgameViewController. だからあなたはこれをしたい:

- (void)startGameWithBlock:(void (^)(Game *))block
{
    GameViewController *gameViewController = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
    gameViewController.delegate = self;

    Game *game = [[Game alloc] init];
    gameViewController.game = game;
    game.delegate = gameViewController;
    block(game);
}

これには 2 つの問題があります。

  1. この関数を終了するとすぐに、ハード参照がなくなるgameViewControllerため、再度割り当てが解除されます。これは、View Controller がself参照するプロパティを定義し、それに割り当てることで解決できます。
  2. -callには、表示されるblockに依存するコードが含まれている可能性がありgameViewControllerます。そうでない場合は、問題ありません。

お役に立てれば。

于 2012-10-31T14:38:20.007 に答える