2010-04-14 3 views
14

Сегодня мой вопрос о UITableViewController-s В частности, я заметил, что метод DataSource делегатUITableView метод делегата вызывается дважды

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 

вызывается дважды (даже если, например, я просто создать навигацию на основе приложения и без добавления строки кода. Хорошо добавив NSLog для ее отслеживания). Теперь, поскольку в моем приложении мне нужно определить количество разделов, основанных на выборе в документах в файловой системе, мне нужно вызвать некоторые методы для этого. Я поместил эти методы в вышеупомянутый метод, поэтому они будут вызываться дважды, что мне не нужно. Вопросы, почему это называется дважды, я могу его вызвать один раз? Надеюсь, что в официальной документации это четко не указано (что означало бы, что я его совсем не читал :)). Кстати, я видел, как другие публиковали подобные вопросы, но я не мог найти полностью удовлетворительный ответ. Спасибо.

+1

Вы когда-нибудь узнали, почему это так?Случается и мне. Точно так же ... – Remover

+0

Я также испытываю такое поведение на ios 4.2 в xcode 4.1. Кажется, я не могу определить, откуда этот дополнительный звонок, Кто-нибудь нашел решение? Или это ошибка? – Mellson

+0

Я также вижу ту же проблему (при которой numberOfSectionsInTableView дважды вызывается при определенных обстоятельствах). Это с iOS 4.2. – kennethmac2000

ответ

11

Я столкнулся с той же проблемой, только с вызовом numberOfRowsInSection: Ответ полученной в трассировке стека за каждый полученный звонок.

  1. Первый звонок был из-за изменения в представлении заголовка таблицы я делал в viewDidLoad: моя ViewController.

    thumbView.tableHeaderView = nil; 
    thumbView.tableFooterView = nil; 
    

    В результате внутреннего вызова _updateContentSize: который называется heightForTable:, который в конечном счете под названием numberOfRowsInSection:. Это было то, что я вызвал, и его можно было бы легко избежать, если не выполнить вышеуказанный код :)

  2. Второй звонок был законным, чтобы перезагрузить Data. Это вызвано случаем компоновки где-то и, скорее всего, вы не можете пропустить его.

Я уверен, что вы можете наблюдать нечто подобное для NumberOfSections: метод

Итак, мой вывод заключается в том, что из-за осуществлением UITableView Есть много ситуаций, когда некоторые методы делегируют будут вызываться дважды или больше, потому что в представлении таблицы необходимо что-то обновить. Я пытаюсь создать свой код вокруг этой ошибки/функции/и т. Д.

Надеется, что это помогает

+0

если я установлен или не установлен -> thumbView.tableHeaderView = nil; thumbView.tableFooterView = nil; «numberOfSectionsInTableView» называется 5 раз. Зачем ? –

2

Если TableView содержится контроллер зрения ребенка, Попробуйте это на свой родителю ViewController

[parentViewController addChildViewController:childViewController]; 

перед тем [parentViewController.view addSubview:childViewController.view]

0

Пожалуйста, проверьте свой код, после добавления TableView вы можете снова позвонить realodData метод таблицы в mey be ViewWillAppear метод

0

Это может произойти, если фреймворк вашего стола будет изменен по ошибке на доске истории. Скажем, вы нажали на раскадровку, в которой вы добавили представление таблицы в качестве подзаголовка, и теперь ваша таблица может не иметь надлежащего фрейма, который вы установили в начале.

Смежные вопросы