2009-07-21 4 views
0

У меня есть пользовательский подкласс UIView, который я пытаюсь использовать в качестве заголовка для одного из моих разделенных разделов таблицы. Я сохраняю экземпляр этого представления в tableViewController и использую его для возврата высоты для раздела заголовка, а также самого представления. проблема в том, что каким-то образом переменная экземпляра изменяется с UIView на CALayer в середине вызова reloadData, который вызывает сбой, поскольку экземпляр имеет специальный метод для возврата ожидаемой высоты. это код, который выходит из строя:Пользовательские заголовки разделов заголовка UITableView ломаются

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if (section == 0) 
    { 
     return [self.dataHeader frameHeight]; 
    } 
    return 0.0f; 
} 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    if (section == 0) 
    {  
     return self.dataHeader; 
    } 
    return nil; 
} 

я поставил точку останова на первой возвращение в, если блок метода heightForHeaderInSection, и он бьет его в 4 раза; первые три возвращают dataHeader успешно, в то время как четвертый раз показывает, что это CALayer, и сбой с исключением doesNotRecognizeSelector (у моего tableview есть 2 раздела, если это имеет значение). Есть ли причина, почему это происходит, и есть ли способ остановить это?

ответ

2

Как выглядит ваш код инициализации для dataHeader? Когда вы инициализируете dataHeader, правильно ли вы его сохраняете?

Я предполагаю, что ваше представление dataHeader будет выпущено до вашего намерения.

+0

Вы правы; это была проблема. Я фактически оставил автореферат от рефактора. Я попробую это завтра, когда у меня появится возможность увидеть, исправляет ли это это :). – Kevlar

0

Проблема, кажется, что у вас есть 2 секции и как-то приложение думает, что есть 4. Вот как я бы отладить эту проблему:

1) Что возвращающегося numberOfSectionsInTableView (это реализуется)?

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

2) Каковы значения раздела при каждом вызове этих делегатов?

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

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