2011-07-21 14 views
2

私は自分のアプリケーションにAppleのゲームセンターを統合しようとしています。リーダーボードにスコアを投稿してリーダーボードを表示することはできますが、リーダーボードモーダルビューを却下しようとすると問題が発生します。私は、Game Kitプログラミングガイド([url] http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/GameKit_Guide/LeaderBoards/LeaderBoards.html [/ url])からAppleのコードの指示に従ってきました。 。ゲームセンターのために、次のようにGameKitモーダルビューを解除する

私のコードは次のとおりです。

-(BOOL)isGameCenterAvailable{ 
    // Check for presence of GKLocalPlayer class. 
    BOOL localPlayerClassAvailable = (NSClassFromString(@"GKLocalPlayer")) != nil; 

    // The device must be running iOS 4.1 or later. 
    NSString *reqSysVer = @"4.1"; 
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending); 
    return (localPlayerClassAvailable && osVersionSupported); 
} 

- (void) authenticateLocalPlayer 
{ 
    if([self isGameCenterAvailable]){ 
     GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
     [localPlayer authenticateWithCompletionHandler:^(NSError *error) { 
      if (localPlayer.isAuthenticated) 
      { 
       // Perform additional tasks for the authenticated player. 
      } 
     }]; 
    } 
} 

- (void) reportScore: (int64_t) score forCategory: (NSString*) category 
{ 
    GKScore *scoreReporter = [[[GKScore alloc] initWithCategory:category] autorelease]; 
    scoreReporter.value = score; 

    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) { 
     if (error != nil) 
     { 
      // handle the reporting error 
     } 
    }]; 
} 

- (void) showLeaderboard 
{ 
    GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init]; 
    if (leaderboardController != nil) 
    { 
     leaderboardController.leaderboardDelegate = self; 
     [self presentModalViewController: leaderboardController animated: YES]; 
    } 
    //[leaderboardController release]; 
} 

- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController 
{ 

    if([self modalViewController] != nil){ 
     [self dismissModalViewControllerAnimated:YES]; 
    } 

} 

-(IBAction)show{ 
    [self showLeaderboard]; 
} 

-(IBAction)submit{ 
    [self reportScore:9 forCategory:kLeaderboardID]; 
} 

Xcodeは、問題の行が[自己dismissModalViewControllerAnimated:YES]である私に語りました。それは私が悪いポインタをアクセスしようとしていることを意味する知っている悪いアクセスを取得していると言いますが、私は何かが無効ではない理由が表示されません。 modalviewcontrollerを持っていると自己報告します。私はあらゆる種類の変種を試しました。なぜ私にエラーが出るのか、私は完全に困惑しています。

何か助力や提案をいただければ幸いです。

ありがとうございます!

答えて

0

私のアプリでは非常に似た問題がありました。私はそれがModalViewController自体に関連するものではなく、それを表示するView Controllerであることを発見しました。

プロファイラでゾンビオプションを使用してアプリケーションをプロファイルすると、リリースされていないものがあることがわかります(おそらくUIImageまたはUIView)。問題を引き起こす実際のオブジェクトを見つけるためにゾンビオブジェクトが割り当てられた機能を追跡することができます。

私は、ModalViewControllerが解読されたときにエラーが表示される理由は、ダイアログが消えてから、何かがアクセスされた後に再描画または更新されるということです。

これが役に立ちます。

関連する問題