2010-12-29 2 views
0

Я потратил несколько часов, пытаясь решить одну очень странную проблему, но я действительно не знаю, как это сделать.cellForRowAtIndexPath возвращает nil на устройстве

У меня есть сгруппированный UITableView, на который ссылается XIB, заполненный пользовательскими (подклассами) ячейками UITableViewCell. Все клетки (две секции с одной ячейкой каждого) открыты, и я стараюсь, чтобы получить один из них по телефону:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1]; 
LocationSearchFilterCell *cell = (LocationSearchFilterCell *)[filterTable cellForRowAtIndexPath:indexPath]; 

На Simulator 4.2 клетка возвращается должным образом;
На устройстве 4.0.x код возвращает NIL;
В Simulator 4.0.x код возвращает NIL;
На тренажере 4.1 ячейка возвращается правильно НО НЕ на устройстве 4.1.

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

Любая идея?

P.S. В ситуации, когда NIL возвращается, с помощью GDB я получаю указатель ячейки при его создании и называют:

(gdb) po (void *)[filterTable indexPathForCell:(UITableViewCell *)0x7b08520] 

и я получаю правильный путь индекса (который соответствует одному я обеспечиваю), что означает, ячейка действительна и присутствует в представлении таблицы.
Я даже пробовал передать объект, возвращенный этим последним вызовом (по указателю), и я все равно получаю NIL.

+0

В какой метод вы пытаетесь получить ячейку? – Rits

+0

Пользовательский метод, который вызывается нажатием кнопки. – pmilosev

+0

попытайтесь проверить, действительно ли возвращаемый объект имеет тип LocationSearchFilterCell: ([cell isKindOfClass: [LocationSearchFilterCell class]]) – Felix

ответ

0

Интересно,

Оказалось, что кто-то скрывает вид таблицы, прежде чем я пытаюсь получить ячейку (stupid me :)).

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

То, что я еще не понимаю, - это то, что табличный вид прорисован как скрытый, хотя анимация еще не закончена (и я изменяю только кадр в анимации и устанавливаю таблицу после завершения анимации)?

Я думаю, что ответ на этот вопрос является ключевым моментом в том, почему при разных комбинациях Device/Simulator/iOS я получаю различное поведение. В любом случае решение так же просто, как перемещение двух строк, которые я разместил выше в верхней части метода.

Благодаря Rīts за его вопрос, что вызвало мои рассуждения;)

рассматривает

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