2013-08-02 73 views
1

以下一段代碼在iOS 6.0(模擬器和設備)上都很好用。遊戲中心呈現的很好。但它在iOS 5.0模擬器上沒有做任何事情。不幸的是,我沒有iOS 5.0的設備,所以我無法檢查它是否與模擬器相關的問題。iOS 5.0模擬器:GKLeaderBoardViewController不顯示

- (void)showLeaderboard:(NSString *)leaderboard 
{ 
    GKLeaderboardViewController * leaderboardViewController = [[GKLeaderboardViewController alloc] init]; 
    leaderboardViewController.modalPresentationStyle = UIModalPresentationCurrentContext; 
    [leaderboardViewController setCategory:leaderboard]; 
    [leaderboardViewController setLeaderboardDelegate:self]; 
    [[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:leaderboardViewController animated:YES completion:^{ 
    }]; 
    [leaderboardViewController release]; 
} 

那麼會發生什麼?沒有。沒有提供視圖。它不會將任何消息記錄到控制檯中。它甚至沒有達到完成塊。 我試着玩,這是我設法弄清楚的。我使用從GKLeaderboardViewController繼承的CustomLeaderboardViewController而不是純粹的GKLeaderboardViewController,並在shouldAutorotateToInterfaceOrientation方法中放置斷點。它不會觸發上面的代碼。但如果我使用 setCategory:nil 而不是 setCategory:leaderboard 那麼該斷點將觸發。仍然沒有進一步發生,完成塊沒有被調用。 任何想法爲什麼會發生這樣的事情?

+0

有幾件事要檢查:你確定leaderboardViewController和[[UIApplication sharedApplication]委託] .window.rootViewController都不是零嗎?排行榜呢?你是否也嘗試在調試和發佈之間切換,以確保你的排行榜不會被過早釋放?你在控制檯中看到任何日誌輸出嗎? –

+0

是的,你是對的,[[UIApplication sharedApplication]委託] .window.rootViewController是零。多麼愚蠢的錯誤!這就是你複製粘貼太多的地方:(。 – illyge

+0

很酷!如果你把我的最新答案標記爲正確,我會很感激。謝謝。 –

回答

0

確保您的變量(例如'排行榜')都不爲零,因爲Objective C喜歡在這種情況下默默地失敗。

0

原來這只是一個愚蠢的錯誤。 [[UIApplication sharedApplication]委託] .window.rootViewController爲零,因爲它從未在iOS 5.0中設置過。