У меня очень странная проблема, и у меня есть ощущение, что это будет странное решение, например, у меня неправильный профиль подготовки (проверено!).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
Я только заметил, что это происходит для каждого просмотра таблицы в приложении - все они работают на iPhone 5 и в симуляторе ничего не работает на 5S ??? –
Я также сделал полный сброс симулятора, чтобы проверить, что он не кэширует XIB-файл для ячеек или что-то еще - и он по-прежнему отлично работает на Simulator. Удалено приложение из 5S и повторно запущено, но все еще не работает. –
Когда вы регистрируете подобный NIB, я не думаю, что вам нужна 'if (cell == nil)' check in cellForRowAtIndexPath. Вам гарантирована ячейка. Поэтому попробуйте удалить этот оператор IF, включая то, что внутри него. – hgwhittle