1

私はiOSで完全にプログラムで作業し、完全にIBで作業しましたが、初めて2つを混合しようとしていて、混乱しています。タブ付きのアプリケーションを書いています。私のアプリデリゲートでは、以前は次のコードを使用していました。

//...Code setting view controllers for various tab items and then this...

GHSettingsViewController *svc = [[GHSettingsViewController alloc] init];
svc.tabBarItem.title = @"Settings";
svc.tabBarItem.image = [UIImage imageNamed:@"20-gear-2.png"];
[tabItems addObject:svc];

そしてそれは大丈夫だった。

次に、IBのストーリーボードを介してビューコントローラーを作成し、それに一連のUI要素を追加して、次の設定を行いました。

ここに画像の説明を入力してください

今私のコードは次のようになります:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
GHSettingsViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"settings"];
svc.tabBarItem.title = @"Settings";
svc.tabBarItem.image = [UIImage imageNamed:@"20-gear-2.png"];
[tabItems addObject:svc];

アプリケーションは正常に起動しますが、タブを押して設定画面に移動すると、次のメッセージが表示されます。

ここに画像の説明を入力してください

これはどういう意味ですか、どうすれば修正できますか?

編集:これは、次のアプリデリゲートからのコードの完全なバージョンですdidFinishLaunching:{self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.window makeKeyAndVisible];

NSMutableArray *tabItems = [[NSMutableArray alloc] initWithCapacity:5];

GHHaikuViewController *hvc = [[GHHaikuViewController alloc] init];
hvc.tabBarItem.title = @"Home";
hvc.tabBarItem.image = [UIImage imageNamed:@"53-house.png"];
[tabItems addObject:hvc];

GHComposeViewController *cvc = [[GHComposeViewController alloc] init];
cvc.tabBarItem.title = @"Compose";
cvc.tabBarItem.image = [UIImage imageNamed:@"216-compose.png"];
[tabItems addObject:cvc];

GHWebViewController *wvc = [[GHWebViewController alloc] init];
wvc.tabBarItem.title = @"Buy";
wvc.tabBarItem.image = [UIImage imageNamed:@"80-shopping-cart.png"];
[tabItems addObject:wvc];

GHFeedback *fvc = [[GHFeedback alloc] init];
fvc.tabBarItem.title = @"Feedback";
fvc.tabBarItem.image = [UIImage imageNamed:@"18-envelope.png"];
[tabItems addObject:fvc];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
//UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard.storyboard" bundle:nil]; //Using this instead causes the application to crash on launching.
GHSettingsViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"settings"]; 
//GHSettingsViewController *svc = [storyboard instantiateInitialViewController]; //Using this instead of the line above causes the same error.
svc.tabBarItem.title = @"Settings";
svc.tabBarItem.image = [UIImage imageNamed:@"20-gear-2.png"];
[tabItems addObject:svc];

GHTabBarController *tbc = [[GHTabBarController alloc] init];
tbc.viewControllers = tabItems;
self.window.rootViewController = tbc;

return YES;

}

4

1 に答える 1

1

UIViewControllerの中でこの新しいを使用しているようですUITabBarController。で、以前と同じようapplication:didFinishLaunchingWithOptions:に新しい を作成しUIStoryboardます。次に、UIViewControllerインスタンスを作成します

UIViewController *viewController = [storyboard instantiateInitialViewController]; 

次に、の配列に追加viewControllerするだけです。viewControllersUITabBarController

何が目的かわかりませんが、View Controller をタブ バーの配列tabItemsに追加する必要があります。viewControllers

更新:チャットでの議論から、ストーリーボードで参照されている追加の IBOutlet がありましたが、実際には接続されておらず、クラッシュを引き起こしていました。デバッグ ナビゲーターの [続行] ボタンをクリックすると、追加情報が得られ、問題が発生しました。

于 2013-01-22T22:30:06.480 に答える