Я использую Xcode 5 и разрабатываю приложение, ориентированное на iOS6/7.UITableViewCell не показывает контент
В моей раскадровке «ячейки прототипа», которые относятся к пользовательскому классу «ObjListCell», полученному из «UITableViewCell», содержит «Content View», который, в свою очередь, содержит UIImageView и два элемента UILabel. Все три из них связаны с IBOutlet в моем классе ObjListCell.
Контроллер табличного представления относится к моему пользовательскому классу «ObjListViewController», полученному из «UITableViewController». Когда этот контроллер представления создан, я уже извлек данные, поэтому в viewDidLoad я сразу вызову [self.tableView reloadData];
. Но прежде чем это сделать, я зарегистрирую класс ячеек: [self.tableView registerClass: [ObjListCell class] forCellReuseIdentifier:@"objTableCell"];
и «objTableCell» установлен в раскадровке как идентификатор для ячеек.
Номер методаOfRows в разделе возвращает 14, и на самом деле я вижу список из 14 пустых строк на моем iPhone. Как видно из журналов, метод cellForRowAtIndexPath фактически вызывается, а метод dequeueReusableCellWithIdentifier возвращает ячейку non-nil. Поэтому я поставил значок и содержание этикетки:
cell.mCellIcon.image = icon;
cell.mCellTitle.text = title;
cell.mCellExtra.text = extra;
я уверен, значок и текст в порядке, потому что я вхожу их только перед назначением их. Но, тем не менее, мои ячейки таблицы кажутся пустыми.
Может ли кто-нибудь предложить, где может быть проблема?
Это весь код cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"objTableCell";
ObjListCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if (cell == nil)
NSLog(@"ObjListViewController ERROR: Cell is nil");
// Retrieve obj for this cell
Obj* obj = [mObjs objectAtIndex:indexPath.row];
if (obj == nil)
NSLog(@"ObjListViewController ERROR: Obj not found for cell; indexPath = %i", indexPath.row);
NSLog(@"ObjListViewController DEBUG: title = %@, extra = %@", obj.mTitle, obj.mExtra);
// Set cell icon
UIImage *icon = [mIcons iconForId:obj.mId andSize:@"big" withDefault:@"defaultIcon"];
if (icon == nil)
NSLog(@"ObjListViewController ERROR: Icon not found for cell; indexPath = %i", indexPath.row);
cell.mCellIcon.image = icon;
// Set cell title and extra
cell.mCellTitle.text = obj.mTitle;
if (obj.hasExtra)
cell.mCellExtra.text = obj.mExtra;
NSLog(@"ObjListViewController DEBUG: Inspecting cell content; icon = %@, title = %@, extra = %@",
(cell.mCellIcon.image != nil ? @"OK" : @"nil"), cell.mCellTitle.text, cell.mCellExtra.text);
// Standard accessory symbol
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
И это отрывок из журнала:
2014-02-16 15:21:06.665 trekking-etc-viewer[2671:60b] ObjListViewController DEBUG: title = Valle d'Aosta, extra =
2014-02-16 15:21:06.668 trekking-etc-viewer[2671:60b] ObjListViewController DEBUG: Inspecting cell content; icon = nil, title = (null), extra = (null)
2014-02-16 15:21:06.685 trekking-etc-viewer[2671:60b] ObjListViewController DEBUG: title = Provincia di Belluno, extra =
2014-02-16 15:21:06.690 trekking-etc-viewer[2671:60b] ObjListViewController DEBUG: Inspecting cell content; icon = nil, title = (null), extra = (null)
Ни один из «ERROR» логах появляются в журнале.
Вы изменили класс ячейки на свой собственный класс в IB? – giorashc
Да, да. В раскадровке я имею в виду. Я только что пришел к выводу, что я не синтезировал три IBOutlets в моем файле ObjListCell.m, но после устранения проблемы эта проблема сохраняется. Я также добавил журнал, чтобы проверить значение cell.mCellIcon.image, cell.mCellTitle.text и cell.mCellExtra.text, после присвоения им их значения: они ноль! Но, как я уже сказал, правые данные до присвоений в порядке. –
Добавьте 'NSLog (@"% @% @% @ ", cell.mCellIcon, cell.mCellTitle, cell.mCellExtra);'. Если он будет показывать значения nil - вы забудете связать элементы GUI с IBOtlet. – Avt