0

各タブに UINavigation テンプレートを持つテンプレートとして持っている tabBarApplication がありました。

そのサンプル (一種) を使用して、別のアプリケーションで単一の UIViewController に変換したいと考えています。2 つのコードを提示しました。最初のコードは私のテンプレートで、後者は作成しようとしているものです。誰かが私にいくつかのヒントを教えてください。エラーが発生し続けますが、tabBarApp は viewController の宣言を必要としないため、意味がありません。

最初のコード (例):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self setupFetchedResultsController];

if (![[self.fetchedResultsController fetchedObjects] count] > 0 ) {
    NSLog(@"!!!!! ~~> There's nothing in the database so defaults will be inserted");
    [self importCoreDataDefaultRoles];
}
else {
    NSLog(@"There's stuff in the database so skipping the import of default data");
}

// The Tab Bar
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

// The Two Navigation Controllers attached to the Tab Bar (At Tab Bar Indexes 0 and 1)
UINavigationController *personsTVCnav = [[tabBarController viewControllers] objectAtIndex:0];
UINavigationController *rolesTVCnav = [[tabBarController viewControllers] objectAtIndex:1];
return YES;
}

2番目のコード(私が作ろうとしているもの):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self setupFetchedResultsController];

if (![[self.fetchedResultsController fetchedObjects] count] > 0 ) {
    NSLog(@"!!!!! ~~> There's nothing in the database so defaults will be inserted");
    [self importCoreDataDefaultRoles];
}
else {

UIViewController *mainViewController = (UIViewController *)self.window.rootViewController;

UINavigationController *readingsTVCnav = [[mainViewController viewController] objectAtIndex:0];

// Override point for customization after application launch.
return YES;
}

コードの取得部分は、既にセットアップされて動作している Core Data に関連しています。この変更の理由は、最初の画面として、tabBarConfiguration ではなくプレーン ビュー コントローラーを設定したいからです。

乾杯ジェフ

編集:わかりやすくするために画像を追加しました

ここに画像の説明を入力

4

1 に答える 1

1

画像で説明および描写したものから、ナビゲーション コントローラーがアプリのルート ビュー コントローラーとして設定されます。didFinishLaunchingWithOptions:したがって、次のようにアプリのデリゲートのメソッドで (必要に応じて) アクセスできます。

UINavigationController *navController = (UINavigationController *)self.window.rootViewController;

あなたのアプリでは、アプリデリゲートからナビゲーションコントローラーを参照する必要がある理由はないと思います。必要なすべてのセットアップ (既に動作していると言うコード データ コードを除く) は、ストーリーボードを介して処理できます。

nagivationController のルート viewController (すべてのボタンを含むもの) で、各ボタンからストーリーボードの適切な viewController へのセグエを設定する必要があります。View ControllerをnavigationControllerのナビゲーションスタックにプッシュするように、必ず「プッシュ」セグエとして設定してください。セグエが発生したときに子View Controllerに対して行う必要がある特定のセットアップがある場合は、次のprepareForSegue:ようにメソッドを実装できます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowMyViewController"]) {

        MyViewController *vc = (MyViewController*)segue.destinationViewController;       
        vc.title = @"My Title";
        vc.someProperty = @"Some Value";
    }
}

このメソッドが呼び出されたときにそれらを識別できるように、ストーリーボード内の各セグエを一意の識別子で識別することができます (またそうする必要があります)。

于 2012-04-10T00:28:23.957 に答える