2012-05-12 9 views
1

私はゲームセンターのサポートを実装しようとしているiOSアプリケーションを持っています。私は私のメイン(ルート)ビューコントローラのloadView中にauthenticateWithCompletionHandlerメソッドを呼び出します。私のメインビューが表示され、まもなく "ゲームセンターへのサインイン"ダイアログが期待どおりに表示されます。 "Create New Account"を選択すると、ゲームセンターの "New Account"ポップオーバーダイアログが画面の中央に表示されます(これはiPad上にあります)が、メインメニューは消えます。ポップオーバーダイアログの下に黒い画面が表示されます。完了ハンドラでダイアログを閉じると、期待どおりに消えてメインメニューに戻ります。ゲームセンター認証中に基底ビューが消える

私はこれが何らかのビュー階層の問題でなければならないと考えています。そのため、私は新しいプロジェクトを作成した問題を簡略化しようとしています。 Xcode 4.3.2を使う私は、単一のView Controllerクラス "AppViewController"を追加して、新しい "Empty Application" iOSプロジェクトを修正しました。私は(ウィンドウの背景色を白に設定されている右後)rootViewControllerを設定するには、AppDelegate.mファイルapplicationDidFinishLaunchingWithOptions方法作成したシステム変更:

​​

を...と私は、ビューをロードするためにAppViewControllerのloadViewメソッドを設定します色付きの背景(それは正しく、その上に合成された場合ので、私は言うことができる)、その後gamekit認証メソッドを呼び出すと:私は私のビュー階層を設定しているか

- (void) loadView { 
    self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease]; 
    self.view.backgroundColor = [UIColor yellowColor]; 
    GKLocalPlayer * localPlayer = [GKLocalPlayer localPlayer]; 
    [localPlayer authenticateWithCompletionHandler:nil]; 
} 

この単純な構造を正確に模倣 - 単一のUIViewControllerは、ビュー階層をロードして管理するウィンドウrootViewControllerとして設定されます。 XIBファイルはありません。

とにかく、私はこの非常に単純なテストアプリで全く同じ動作をします。 「新規アカウント」のポップオーバーダイアログが表示されたら、基になるビュー(この場合は黄色の塗りつぶし)が消えます(下にある白い塗りが表示されます)。私はこれが、私がこれらのコントローラとビューを管理する方法を誤解していると誤解していると思います。

しかし、私は「新規アカウント」ウィンドウから取り消すか、既存のアカウントを使用してログインし、すぐに達成ポップアップダイアログを表示する(presentModalViewControllerを使用して) )、それは動作します!私は達成ダイアログの後ろに私のメインメニューを見ることができます。 View ControllerへのシンプルなボタンをView Controllerに追加すると、同じことが示されました。アチーブメントダイアログはバックグラウンドビューをうまく示していますが、「New Account」ダイアログは基になるビューを隠しています。明らかに、私は "New Account"ダイアログを私の背後にあるビューの上に浮かせるようにしたいと思います。私はiOS 5.1でテストしていることを言及する必要があります。

お手数をおかけしていただきありがとうございます。

UPDATE:別のstackoverflowポストのアドバイスを受けた後、私はジェフラマルシュ、デビッドマーク、そしてジャック・ナッティングによって「5開発に始まりiOS版」を購入し、Xcodeの「空のアプリケーション」テンプレートから開始に関するセクションを検討しました。これはテストコードを少し変更するようになった。直接「rootViewController」プロパティを設定する代わりには、私は今applicationDidFinishLaunchingWithOptionsでこれをやっている:

UIViewController * viewController = 
    [[[AppViewController alloc] initWithNibName:nil bundle:nil] autorelease]; 
viewController.view.backgroundColor = [UIColor yellowColor]; 
[self.window addSubview:viewController.view]; 

私も私のビューコントローラに上記のloadViewメソッドを処分しました。これは動作します!なぜ誰にも分かりませんか?私は2つのシステムの間に実質的な違いは見られません。最初は私はだと思います。ビューコントローラのビュー(2番目のシステムのビューコントローラビューにはalloc/initはありません)。自動的に作成されるビューには特別なものがありますか?

UPDATE X2:OK、それは本当の違いはラインであるようになっています。私は、自動的にウィンドウにビューを追加し、ウィンドウ上のrootViewControllerを設定する考え

[self.window addSubview:viewController.view]; 

が、私はやるしない限り、明示的に、私はこの奇妙な行動を取る。だから私はこの問題のための回避策を見つけた、私はちょうどそれが動作する理由を理解していない。何か案は?ありがとう!

+0

+1私は同じ問題を抱えていました。 addSubviewを使用して固定しました。ありがとう!答えとして投稿する必要があります。 – rasmus

答えて

0

あなたの問題の原因はわかりませんが、通常はauthenticateWithCompletionHandlerメソッドは、アプリケーションが起動するとすぐに呼び出されます。 appDelegateのapplicationDidFinishLaunchingWithOptionsメソッド内でそれを移動し、それが動作するかどうかを確認してください。

+0

こんにちは - 助けてくれてありがとう!残念ながら、これは動作を変更しませんでした。私はまだこれを理解することはできません。 – vedinerd

関連する問題