0

テーブルビューを含むタブバーのすべて(タブ名、タブアイコン、タイトル、詳細)を入力し、VCをviewControllers配列にするplistがあります。「コンテンツビューコントローラを使用したバナーVC割り当て:viewControllers」-アレイ、単一のVCのみ、または既知の場合は複数のVCを受け入れません。タブは変更可能で、移動したり変更したりできるため、個別にプログラムすることはできません。不明なタブの配列をbannerviewコントローラーに渡すにはどうすればよいですか?

以下は非常に近いですが、banner vcは、セット全体ではなく、plistの最後のセットのみを表示します...そして、viewControllers配列をそれに渡そうとするとクラッシュします。

質問は何ですか...5つのタブが組み込まれている1つのplistを使用してバナーvcをロードするにはどうすればよいですか?

よろしくお願いします。そして、コースから外れたら、誰かが私を盗もうとしてください。私は本当に自分自身をオニル5タブに制限したくありません。

plistにキーを追加するだけで、自動的にタブがmoreセクションにアドバタイズされます...これをbannew VCに渡すにはどうすればよいですか?

_tabBarController.viewControllers = viewControllers; //Loads the array viewControllers fine with 5 tabs and icons, but no banner container

_tabBarController.viewControllers = @[[[BannerViewController alloc] initWithContentViewController:viewControllers]] // Crashes on launch

_tabBarController.viewControllers = @[[[BannerViewController alloc] initWithContentViewController:newsNavigationController]] // Loads only the last key in plist and with no icons


     @implementation AppDelegate {
    UITabBarController *_tabBarController;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    CGRect bounds = [[UIScreen mainScreen] bounds];
    self.window = [[UIWindow alloc] initWithFrame:bounds];
    self.window.backgroundColor = [UIColor whiteColor];    

    NSMutableArray * viewControllers = [[NSMutableArray alloc] init];

    NSString * subscriptionListFile = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"My_Subscription.plist"];
    NSDictionary * subscriptionList = [[NSDictionary alloc] initWithContentsOfFile:subscriptionListFile];
    NSArray * subscriptionFolders = subscriptionList[@"Folders"];

    NewsListViewController * newsController = nil;
    UINavigationController * newsNavigationController = nil;

    for (NSDictionary * folderDetails in subscriptionFolders) {

        NSArray * newsItems = folderDetails[@"Items"];
        NSString * folderTitle = folderDetails[@"FolderName"];
        NSString * folderIcon = folderDetails[@"FolderIcon"];
        UIImage * folderIconImage = [UIImage imageNamed:folderIcon];

        newsController = [[NewsListViewController alloc] initWithNewsSourceList:newsItems];
        [newsController setTitle:folderTitle];
        newsNavigationController = [[UINavigationController alloc] initWithRootViewController:newsController];
        [newsNavigationController setTitle:folderTitle];
        [newsNavigationController.tabBarItem setImage:folderIconImage];
        [viewControllers addObject:newsNavigationController];

    }

    _tabBarController = [[UITabBarController alloc] init];



//  _tabBarController.viewControllers = viewControllers;   <--- this line works, below doesnt load the array...


    _tabBarController.viewControllers = @[[[BannerViewController alloc] initWithContentViewController:viewControllers]]


         self.window.rootViewController = _tabBarController;
        [self.window makeKeyAndVisible];
        return YES;
    }
@end        //The above crashes, but works fine if I SKIP "BannerViewController alloc..." 
            //and go right to "_tabBarController.viewControllers = viewControllers"  

            //perfect but no adbanner :(
4

1 に答える 1

0

メソッドinitWithContentViewController:は、その名前からわかるように(コントローラーではなくコントローラー)、引数として1つのビューコントローラーのみを受け入れます。そのメソッドはUIPopoverControllerのメソッドであり、通常、ポップオーバーコントローラーをtabBarコントローラーのviewControllersのコントローラーの1つにすることはないため、何をしようとしているのかは明確ではありません。

于 2012-11-08T18:55:37.093 に答える