2014-02-19 2 views
0

У меня очень странная проблема, и у меня есть ощущение, что это будет странное решение, например, у меня неправильный профиль подготовки (проверено!).UITableView показывает пустые ячейки, даже если cellForRowAtIndexPath вызывается правильно

Я могу работать на Симуляторе и одном из моих iPhone 5, и у меня есть UITableView, населяющий некоторые ячейки, все играют хорошо.

Однако я только что запустил его на своем 5S, и вид таблицы полностью пуст. Ячейки не могут быть выбраны или что-либо еще. Я проверил, что TableView не освобождается или что-то еще, и он реагирует, если я снижу, чтобы обновиться. Я даже вижу, что мои записи говорят о том, что методы numberOfRows ... и cellForRow .. снова вызываются, если я пытаюсь обновить, просто никакой пользовательский интерфейс не отображается вообще!

Вот различные фрагменты в случае, если это помогает: выход

- (void)viewDidLoad 
{ 
... 
    UINib *cellNib = [UINib nibWithNibName:@"EJCMatchInboxCell" bundle:nil]; 
    [self.matchTable registerNib:cellNib forCellReuseIdentifier:kEJCMatchInboxCellIdent]; 

    UINib *segmentedCellNib = [UINib nibWithNibName:@"EJCSegmentedControlCell" bundle:nil]; 
    [self.matchTable registerNib:segmentedCellNib forCellReuseIdentifier:kEJCMatchInboxSegmentedControlCellIdent]; 
... 
    self.refreshControl = [[UIRefreshControl alloc] init]; 
    [self.refreshControl addTarget:self action:@selector(refresh) 
     forControlEvents:UIControlEventValueChanged]; 
    [self.matchTable addSubview:self.refreshControl]; 
... 
} 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(indexPath.row == 0 && indexPath.section == 0) { 
     return NO; 
    } 

    return YES; 
} 

- (long)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (long)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    long rowCount = matches.count + 1; 
    NSLog(@"MatchInboxVC::numberOfRowsInSection %li", rowCount); 
    return rowCount; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"MatchInboxVC::cellForRowAtIndexPath %li", indexPath.row); 

    if(indexPath.row == 0 && indexPath.section == 0) { 
     // segmented control cell 
     EJCSegmentedControlCell *cell = [tableView dequeueReusableCellWithIdentifier:kEJCMatchInboxSegmentedControlCellIdent]; 

     // Configure the cell... 
     if (cell == nil) { 
      cell = [[EJCSegmentedControlCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kEJCMatchInboxSegmentedControlCellIdent]; 
     } 

     [cell.segmentedControl setSelectedSegmentIndex:selectedSegmentIndex]; 
     [cell.segmentedControl addTarget:self action:@selector(changedSegmentSelection:) forControlEvents:UIControlEventValueChanged]; 
     [cell.segmentedControl setTitle:@"Current" forSegmentAtIndex:0]; 
     [cell.segmentedControl setTitle:@"Deleted" forSegmentAtIndex:1]; 

     return cell; 
    } 
    else { 
     // match cell 
     EJCMatchInboxCell *cell = [tableView dequeueReusableCellWithIdentifier:kEJCMatchInboxCellIdent]; 

     // Configure the cell... 
     if (cell == nil) { 
      cell = [[EJCMatchInboxCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kEJCMatchInboxCellIdent]; 
     } 

     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

     EJCMatch *m = matches[indexPath.row - 1]; 
     [cell setupWithMatch:m]; 

     return cell; 
    } 
} 

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(indexPath.row == 0 && indexPath.section == 0) { 
     return 38.0f; 
    } 
    else { 
     return 65.0f; 
    } 
} 

Logging:

MatchInboxVC::numberOfRowsInSection 2 
MatchInboxVC::cellForRowAtIndexPath 0 
MatchInboxVC::cellForRowAtIndexPath 1 
+0

Я только заметил, что это происходит для каждого просмотра таблицы в приложении - все они работают на iPhone 5 и в симуляторе ничего не работает на 5S ??? –

+0

Я также сделал полный сброс симулятора, чтобы проверить, что он не кэширует XIB-файл для ячеек или что-то еще - и он по-прежнему отлично работает на Simulator. Удалено приложение из 5S и повторно запущено, но все еще не работает. –

+0

Когда вы регистрируете подобный NIB, я не думаю, что вам нужна 'if (cell == nil)' check in cellForRowAtIndexPath. Вам гарантирована ячейка. Поэтому попробуйте удалить этот оператор IF, включая то, что внутри него. – hgwhittle

ответ

2

Право - Я думаю, это была моя собственная вина забывания прочитать определение метода правильно, но, видимо, установка возвращаемый тип (float) для heightForRowAtIndexPath на 5S предотвратит отображение ячеек вообще.

решаемые путем изменения определения метода из

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

в

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
+0

Очень странно, что поведение на разных устройствах iOS7 отличается. Просто проверено, и устройство, которое сломалось, работает 7.0.4, и устройство, в котором он работал, в любом случае работает 7.0, поэтому они должны были ввести что-то между этими версиями. –

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