Ios4 表视图将不响应

Ios4 表视图将不响应,ios4,uikit,Ios4,Uikit,我有一个从UITableViewController派生的BarTableViewController。 它是我的主视图,因此在应用程序启动时自动加载,并且该类的实例工作正常 现在我尝试让原始实例推送同一类的另一个实例,如下所示: BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease]; [self.navigationController pushViewControll

我有一个从UITableViewController派生的BarTableViewController。 它是我的主视图,因此在应用程序启动时自动加载,并且该类的实例工作正常

现在我尝试让原始实例推送同一类的另一个实例,如下所示:

BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease];
[self.navigationController pushViewController:bar animated:YES];
- (id)initForFoo:(Foo *)theFoo
{
    if ((self = [self initWithNibName:@"BarTableViewController" bundle:nil])) {
        self.foo = theFoo;
    }
    return self;
}
initForFoo方法如下所示:

BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease];
[self.navigationController pushViewController:bar animated:YES];
- (id)initForFoo:(Foo *)theFoo
{
    if ((self = [self initWithNibName:@"BarTableViewController" bundle:nil])) {
        self.foo = theFoo;
    }
    return self;
}
推送工作,视图加载,在模拟器中工作良好

然而,在我的iPhone4上,表视图在第二种情况下没有响应:在屏幕上上上下滑动手指没有任何作用。如果我点击搜索栏中的,然后点击取消,则表格会有响应

如果我只是调用init,而不是initWithNibName,那么即使是第一次,表视图也会正确响应,但是当然,我的IBOutlet内容都不会绑定

这似乎是一次性的:一旦我完成了搜索并取消,表就会响应,即使我点击后退按钮,然后再次返回到视图控制器的同一个实例,它也不会被卡住

我做错了什么

更新: 我的MainWindow.xib中确实有这个家伙作为RootViewController。我试过了 让应用程序代理创建他,但还是一样的行为:一切 除表格视图不滚动外,其他功能均有效。但是现在初始实例也被冻结了

所以,每当我显式调用initWithNibName时,我都会得到这种冻结行为

更新2: 我已经对viewDidLoad的不同部分进行了注释,如果我忽略这一点,它似乎一直有效:

[self.navigationController setToolbarHidden:NO animated:NO];
当然,这意味着我没有工具栏。我试着在没有工具栏项的情况下把它放回去,但它仍然存在问题

更新3: 当GDB处于这种状态时,我在UITableView中发现:

(gdb) p * [[[UIApplication sharedApplication] delegate] searchViewController] <UITableViewController> = { <UIViewController> = { <UIResponder> = { <NSObject> = { isa = 0x9fe44 }, <No data fields>}, members of UIViewController: _view = 0xa27600, _tabBarItem = 0x0, _navigationItem = 0x4d6dcc0, _toolbarItems = 0x0, _title = 0x0, _nibName = 0xb9120, _nibBundle = 0x242b40, _parentViewController = 0x4d6de90, _childViewControllers = 0x0, _childModalViewController = 0x0, _parentModalViewController = 0x0, _modalTransitionView = 0x0, _modalPreservedFirstResponder = 0x0, _defaultFirstResponder = 0x0, _dimmingView = 0x0, _dropShadowView = 0x0, _presentationSuperview = 0x0, _sheetView = 0x0, _currentAction = 0x0, _savedHeaderSuperview = 0x0, _savedFooterSuperview = 0x0, _editButtonItem = 0x0, _searchDisplayController = 0x4d7b290, _popoverController = 0x0, _modalTransitionStyle = UIModalTransitionStyleCoverVertical, _modalPresentationStyle = UIModalPresentationFullScreen, _lastKnownInterfaceOrientation = UIInterfaceOrientationPortrait, _contentSizeForViewInPopover = { width = 320, height = 1100 }, _formSheetSize = { width = 0, height = 0 }, _viewControllerFlags = { appearState = 2, isEditing = 0, isPerformingModalTransition = 0, hidesBottomBarWhenPushed = 0, autoresizesArchivedViewToFullSize = 0, viewLoadedFromControllerNib = 0, isRootViewController = 0, isSheet = 0, isSuspended = 0, wasApplicationFrameAtSuspend = 0, wantsFullScreenLayout = 0, shouldUseFullScreenLayout = 0, allowsAutorotation = 1, searchControllerRetained = 1, oldModalInPopover = 0, isModalInPopover = 0, restoreDeepestFirstResponder = 0, isInWillRotateCallback = 0, disallowMixedOrientationPresentations = 0, modalPresentationsAreCurrentContext = 0 } }, members of UITableViewController: _tableViewStyle = UITableViewStylePlain, _keyboardSupport = 0x4d87540, _tableViewControllerFlags = { clearsSelectionOnViewWillAppear = -1 } }, 我在gdb尝试了几次盲目的isFirstResponder刺杀,但没有成功。

我读到:

如果在同一个NIB中创建视图控制器及其视图,并将视图嵌套在视图控制器下,它将自动调整视图的帧

在中,这启发我尝试编辑我的XIB,添加一个ViewController,并将TableView放在以前我必须在XIB中使用的ViewController下,TableView处于顶级


这解决了我的冻结表视图的问题,但我仍然不明白为什么:我在检查各个组件的框架大小之前和之后做了一系列的检查,但不知道发生了什么变化。但至少它是固定的。

我有预感,这可能是第一反应者的问题。一些次要元素并没有放弃作为第一响应者的角色,所以您的滚动视图没有响应……我该如何跟踪它?我并没有明确地设置第一响应者:它只是一个带有导航条的UITableViewController。我肯定我在做一些愚蠢的事情。它肯定与时间有关,因为它在模拟器中工作,而第一响应者和时间往往是相关的。