无法让辅助 UITableViewController 在 UITabBarController 中显示

Posted

技术标签:

【中文标题】无法让辅助 UITableViewController 在 UITabBarController 中显示【英文标题】:Can't get Secondary UITableViewController to display inside a UITabBarController 【发布时间】:2010-04-09 09:13:00 【问题描述】:

我以编程方式创建了一个 UITabBarController,它像这样加载到我的 App Delegate 中:

- (void)applicationDidFinishLaunching:(UIApplication *)application     
tabBarController = [[UITabBarController alloc] init];

myTableViewController = [[MyTableViewController alloc] init];
UINavigationController *tableNavController = [[[UINavigationController alloc] initWithRootViewController:myTableViewController] autorelease];
myTableViewController.title = @"Tab 1";
[myTableViewController release];

mySecondTableViewController = [[MySecondTableViewController alloc] init];
UINavigationController *table2NavController = [[[UINavigationController alloc] initWithRootViewController:mySecondTableViewController] autorelease];
mySecondTableViewController.title = @"Tab 2";
[mySecondTableViewController release];

tabBarController.viewControllers = [NSArray arrayWithObjects:tableNavController, table2NavController, nil]; 

[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

现在我遇到的问题是我可以毫无问题地进入视图,但是当我尝试单击表视图中的任何项目时,我无法让辅助表视图出现在任何选项卡中。选项卡工作得很好,只是辅助视图。我在 myTableViewController 中使用下面的代码在选择特定行时运行(代码到达 HELP 行并崩溃)...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
NSUInteger row = [indexPath row];
    // this gets the correct view controller from a list of controllers
SecondaryViewController *svc = [self.controllers objectAtIndex:row];

    /*** HELP NEEDED WITH THIS LINE ***/    
[self.navigationController pushViewController:svc animated:YES];


简单地说,我正在尝试将视图切换到新的视图控制器,同时保持选项卡可用并使用导航来回移动(就像在 iTunes 应用程序中一样)。

【问题讨论】:

【参考方案1】:

简单地说,我是在创建控制器数组,self.controllers,添加对象,然后释放对象。

如果在释放数组之前不释放对象,它似乎工作没有问题。

【讨论】:

Uuups - 我没有注意到你回答了你的问题。你的问题解决了吗?【参考方案2】:

您的问题中没有包含如何初始化 self.controllers 数组。

我怀疑这个数组没有被初始化的 SecondaryViewController 对象填充。

编辑(添加适用于我的代码示例):

.h 文件:

@interface FirstLevelViewController : UITableViewController 
    NSArray *controllers;

@property (nonatomic, retain) NSArray *controllers;
@end

和 .m 文件:

@implementation FirstLevelViewController
@synthesize controllers;
- (void)viewDidLoad 
    self.title = @"First Level";
    NSMutableArray *array = [[NSMutableArray alloc] init];

    // Disclosure Button
    DisclosureButtonController *disclosureButtonController =
    [[DisclosureButtonController alloc] 
     initWithStyle:UITableViewStylePlain];
    disclosureButtonController.title = @"Disclosure Buttons";
    disclosureButtonController.rowImage = [UIImage 
                                           imageNamed:@"disclosureButtonControllerIcon.png"];
    [array addObject:disclosureButtonController];
    [disclosureButtonController release];  

    // deleted further adds to array ...

    self.controllers = array;
    [array release];
    [super viewDidLoad];

【讨论】:

这些是初始化的 SecondaryViewController 对象... ...在 MyTableViewController viewDidLoad 我有: SecondaryViewController *svc = [[SecondaryViewController alloc] initWithStyle:UITableViewStylePlain]; svc.title = @"svc"; [数组添加对象:svc]; [svc 发布]; self.controllers = 数组;当我从 self.controllers 数组中获取控制器时,会返回这个对象。该值不是 nil (因此它被创建)并且标题设置正确。仅供参考 SecondaryViewController 子类 UITableViewController 和自我委托 嗯 ...似乎我们面前有同一本书(开始 iPhone 3 开发);-) 我无法在您的代码中发现任何错误。编译器是否有任何错误消息? 我刚刚尝试通过直接创建 svc 对象来运行代码(而不是将其从数组中拉出)并且它可以工作......所以从数组不太正确 我刚刚检查了属于本书的源代码,是否有任何更正或勘误。他们完全按照您描述的方式进行操作,并且在我的模拟器中编译和运行良好。在失败期间,您是否在调试器窗口中收到任何消息? 对不起...不得不出去一会儿。嗯......很高兴我朝着正确的方向前进,只是真的很困惑为什么它不能开箱即用!直接创建对象而不是从数组中获取对象似乎可行。我会努力解决这个问题,看看我能不能解决它。

以上是关于无法让辅助 UITableViewController 在 UITabBarController 中显示的主要内容,如果未能解决你的问题,请参考以下文章

13.UiAutomator 辅助APK的使用

如何在 R Shiny 中使用变量名访问辅助输入?

Scala:使用map从列表中提取辅助元组值

#yyds干货盘点#HostMonitor辅助网络管理

英雄联盟(LOL)游戏的辅助进程无法关闭

为啥 VS 2010 Intellisense 仅在我安装了视觉辅助 X 时才有效?