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 对象。最后,它会调用您的块来执行特定于游戏类型的初始化

我已经阅读了有关 Blocks 的内容,它在 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);
}

这有两个问题。

  1. 一旦你离开这个函数,就没有对你的硬引用,gameViewController所以它会再次被释放。您可以通过在任何视图控制器引用的属性中定义一个属性self并分配给它来解决这个问题。
  2. 您的block-call 可能包含依赖于gameViewController显示的代码。如果不是这种情况,你应该没问题。

希望这可以帮助。

于 2012-10-31T14:38:20.007 回答