2012-10-31 73 views
0

我有以下代碼:如何刪除presentViewController語句而不影響該塊?

- (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 本它,然後分配遊戲對象。 最後,它要求你的塊做遊戲類型特異性初始化

我看了一下塊和它是火gameviewcontroller的loadView 後,我想以同樣的方式運行的代碼塊,因爲它是現在,但與出現目前的看法,請幫助

+0

嗯?我不確定我瞭解你的問題。你爲什麼不移除persentViewController部分,而是保留完成塊的內容? – Tobi

+0

我已經試過這個解決方案,但它不是調用gameview控制器方法 – Mohammed

+0

你是指什麼方法? – Tobi

回答

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的代碼。如果情況並非如此,你應該沒問題。

希望這會有所幫助。

+0

是的,我在案例二我應該怎麼做在這種情況下,我應該手動打電話給他們? – Mohammed

+0

嗯......所以該塊取決於要顯示的「gameView」?然後你有一個邏輯上的問題,沒有顯示視圖,但想要執行該塊。那麼首先,你背後的動機/解釋是什麼? – ilmiacs

+0

我想自定義開源遊戲的代碼: http://www.raywenderlich.com/12910/how-to-make-a-simple-playing-card-game-with-multiplayer-and-bluetooth部分3 – Mohammed