0

我想在TabBar中使用splitview。現在我在我的第一個TabBarItem中有一個SplitView。我嘗試訪問SplitViewController中的不同DetailView或右視圖時遇到問題。從SplitViewController設置數組.viewControllers

我想在SplitView中的我的根(或主)視圖控制器的didSelectRowAtIndexPath內部執行它。

下面是代碼,我嘗試從AppDelegate對象訪問我的TabBarController,並更改我的SplitView的viewControllers數組,只更改第二個視圖控制器。我總是得到這個崩潰的錯誤,他說,第二個實例發送是無法識別的:- [SecondViewController viewControllers]:無法識別的選擇發送到實例0x6852460

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
//object AppDelegate 
AppDelegate *myDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

//Objecte in Index 0 is my SplitVC 
NSArray *barControllers = myDelegate.tabBarController.viewControllers; 

if (indexPath.row == 0) 
{ 
    SplitVC *temporalSplit = [barControllers objectAtIndex:indexPath.row]; 

    NSArray *mArray = temporalSplit.viewControllers; 

    FirstViewController *detail = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil]; 

    UINavigationController *navigationDetail = [[UINavigationController alloc]initWithRootViewController:detail]; 

    temporalSplit.delegate = detail; 

    temporalSplit.viewControllers = [[NSArray alloc] initWithObjects:[mArray objectAtIndex:0], navigationDetail, nil]; 

    myDelegate.tabBarController.viewControllers = [NSArray arrayWithObjects:temporalSplit.viewControllers, [barControllers objectAtIndex:1], nil]; 

} 
else if (indexPath.row == 1) 
{ 
    SplitVC *temporalSplit = [barControllers objectAtIndex:indexPath.row]; 

    NSArray *mArray = temporalSplit.viewControllers; 

    Detail2VC *detail = [[Detail2VC alloc]initWithNibName:@"Detail2VC" bundle:nil]; 

    UINavigationController *navigationDetail = [[UINavigationController alloc]initWithRootViewController:detail]; 

    temporalSplit.delegate = detail; 

    temporalSplit.viewControllers = [[NSArray alloc] initWithObjects:[mArray objectAtIndex:0], navigationDetail, nil]; 


    myDelegate.tabBarController.viewControllers = [NSArray arrayWithObjects:[barControllers objectAtIndex:0], temporalSplit, nil]; 
} 
[myDelegate release]; 
} 

而且我的AppDelegate代碼(即沒有問題的作品):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 

// Override point for customization after application launch. 

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

UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease]; 

for (int i = 0; i<2; i++) 
{ 
    if(i == 0) 
    { 
     _firstViewController = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; 

     _masterApp = [[MasterVC alloc]initWithNibName:@"MasterVC" bundle:nil]; 

     _masterApp.firstViewController = _firstViewController; 
     _firstViewController.mastervc = _masterApp; 

     UINavigationController *navigationMaster = [[UINavigationController alloc]initWithRootViewController:_masterApp]; 
     UINavigationController *navigationDetail = [[UINavigationController alloc]initWithRootViewController:_firstViewController]; 

     _splitVC = [[SplitVC alloc] initWithNibName:nil bundle:nil]; 
     //_splitVC.tabBarItem = controller.tabBarItem; 
     _splitVC.viewControllers = [NSArray arrayWithObjects:navigationMaster, navigationDetail, nil]; 
     _splitVC.delegate = _firstViewController; 

     [controllersBar addObject:_splitVC]; 
    } 
    else if (i == 1) 
    { 
     [controllersBar addObject:viewController2]; 
    } 
} 

//self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; 

_tabBarController.viewControllers = controllersBar; 
_tabBarController.selectedIndex = 0; 
_tabBarController.delegate = self; 

self.window.rootViewController = self.tabBarController; 

[self.window makeKeyAndVisible]; 

return YES; 
} 

我在做什麼錯?任何幫助或建議是受歡迎的。

感謝所有提前。

回答

相關問題