2

Xcode 4.5 にアップグレードする前に、Xcode 4.0 で正常に動作していた既存の iPhone アプリがあります。アップグレードすると、iPhone/iPad 4.3 シミュレーターで実行すると黒い画面が表示され、iPhone/iPad 6.0 シミュレーターで実行すると次の例外が発生します。

Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'A view can only be associated with at most one view controller at a time! View <CCGLView: 0x8c7f380; frame = (0 0; 320 480); layer = <CAEAGLLayer: 0x8c7f670>> is associated with <CCDirectorDisplayLink = 0x994c7f0 | Size: 320 x 480, view = <CCGLView: 0x8c7f380; frame = (0 0; 320 480); layer = <CAEAGLLayer: 0x8c7f670>>>. Clear this association before associating this view with <RootViewController: 0x8c7ef00>.'

このアプリは Cocos2D 2.0 を使用しており、オンラインのチュートリアルに基づいて非常にシンプルです。XIB ファイルがありません。すべてがプログラムで行われています。

これらは、6.0 シミュレーターで例外を引き起こす行です (IOS6TestAppDelegate.m から):

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
[enter link description here][1]viewController.wantsFullScreenLayout = YES;

これらの行がコメント アウトされている場合、6.0 シミュレータでは、通常のメニュー画面ではなく黒い画面も表示されます。

これに関する解決策をオンラインで検索し、多くのことを試しましたが、進歩することができませんでした。私はiPhoneプログラミングにかなり慣れていませんが(一般的なプログラミングは初めてではありません)、これに本当に苦労しています。助けていただければ幸いです。

4

1 に答える 1

3

まずは削除

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
viewController.wantsFullScreenLayout = YES;

次に交換

[window setRootViewController:viewController];

if( ! [director enableRetinaDisplay:YES] )
    CCLOG(@"Retina Display Not supported");

// Create a Navigation Controller with the Director
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:director];
navController.navigationBarHidden = YES;
NSString *reqSysVer = @"6.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
{
    [window setRootViewController:navController];
} else
{
    [window addSubview: navController.view];
}

それはそれを行う必要があります!

于 2012-10-02T04:18:19.773 に答える