Таблица не отвечает - PullRequest
       1

Таблица не отвечает

0 голосов
/ 15 апреля 2011

У меня есть BarTableViewController, который происходит от UITableViewController.Это мой основной вид, поэтому он загружается автоматически при запуске приложения, и этот экземпляр класса работает нормально.

Теперь я пытаюсь, чтобы этот оригинальный экземпляр выдвинул другой экземпляр того же класса, как этот:

BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease];
[self.navigationController pushViewController:bar animated:YES];

Метод initForFoo выглядит следующим образом:

- (id)initForFoo:(Foo *)theFoo
{
    if ((self = [self initWithNibName:@"BarTableViewController" bundle:nil])) {
        self.foo = theFoo;
    }
    return self;
}

Пуш работает, и представление загружается, и прекрасно работает в симуляторе.

Однако на моем iPhone 4Представление таблицы в этом втором случае не реагирует: мой палец вверх и вниз по экрану ничего не делает.Если я нажимаю в строке поиска, затем нажимаю «Отмена», таблица становится отзывчивой.

Если вместо вызова initWithNibName я просто вызываю init, тогда табличное представление отвечает правильно даже в первый раз, но, конечно, ни один из моих материалов IBOutletстановится связанным.

Похоже, это единовременная вещь: после того, как я выполню поиск и отмену, таблица ответит, и даже если я нажму кнопку "Назад", вернусь к тому же самому.снова экземпляр контроллера представления, он не застрянет.

Что я здесь не так делаю?

ОБНОВЛЕНИЕ: У меня был этот парень как RootViewController в моем MainWindow.xib.Я попытался убрать это и заставить делегата приложения создать его, но все же поведение: все работает, кроме табличного представления, не прокручивая.Но теперь первоначальный экземпляр также заморожен.

Итак, всякий раз, когда я явно вызываю initWithNibName, я получаю это замороженное поведение.

UPDATE2: я комментировал различные фрагменты 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
    }
  }, 

Я попробовал несколько слепых ударов isFirstResponder в gdb, но безуспешно.

1 Ответ

0 голосов
/ 16 апреля 2011

читаю:

Если вы создаете свой контроллер вида и его вид в том же NIB и вкладываете вид под контроллером вида, он автоматически настроит рамку вида.

в ответ на этот вопрос , и это вдохновило меня на попытку отредактировать мой XIB и добавить ViewController и поместить в него TableView - ранее мне нужно было ViewController в XIB, а TableView был на верхнем уровне .

Это исправляет мою проблему «просмотра замороженных таблиц», но я до сих пор не понимаю, почему: я сделал кучу проверок размеров до и после кадра различных компонентов и не мог сказать, что изменилось. Но это исправлено по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...