Добавление пользовательского UITableViewCell приводит к сбою симулятора - PullRequest
0 голосов
/ 23 апреля 2010

Я пытаюсь создать свое приложение, используя пользовательский UITableViewCell. Это код в моем UIViewController, который добавляет viewCell в таблицу:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    NSLog(@"------- Tableview --------");

    static NSString *myIdentifier = @"MyIdentifier";

    MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:myIdentifier];
    if(cell == nil) {
        NSArray *cellView = [[NSBundle mainBundle] loadNibNamed:@"tblCellView" owner:self options:nil];
        cell = [cellView objectAtIndex:0];
    }

    [cell setLabelText:[NSString stringWithFormat:@"indexpath.row: %d", indexPath.row]];


    //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myIdentifier] autorelease];
    cell.textLabel.text = @"bös";
    return cell;
    }

Если я раскомментирую строку над «возвратной ячейкой», она возвращает обычную UITableViewCell без каких-либо ошибок, но как только я пытаюсь реализовать свою пользовательскую ячейку, происходит сбой с этой ошибкой:

------- Tableview -------- 2010-04-23 11: 17: 33.163 Golf [26935: 40b] * Ошибка подтверждения в - [UITableView _createPreparedCellForGlobalRow: withIndexPath:], /SourceCache/UIKit_Sim/UIKit-984.38/UITableView.m:4709 2010-04-23 11: 17: 33.164 Гольф [26935: 40b] * Завершение приложения из-за необученного исключение NSInternalInconsistencyException, причина: UITableView dataSource должен возвращать ячейку из tableView: cellForRowAtIndexPath: ' 2010-04-23 11: 17: 33.165 Гольф [26935: 40b] Стек: (

...

Я настроил файл .xib так, как следует с соответствующими выходами. И идентификатор UITableViewCell соответствует имени, которое я пытаюсь загрузить из NSBundle

Ответы [ 5 ]

1 голос
/ 06 апреля 2012

Я создал это определение, чтобы помочь


#define LoadViewNib(__NIBNAME__) [[[NSBundle mainBundle] loadNibNamed:__NIBNAME__ owner:self options:nil] objectAtIndex:0]

для использования, вы можете сделать это только



 if(cell == nil) {

        cell = LoadViewNib(@"MyCellNibName");
 }

1 голос
/ 20 мая 2011

Вы также должны установить тип пользовательского класса в Интерфейсном Разработчике для соответствующего имени класса (в нашем примере это MyTableCell), иначе приведение не будет работать.

1 голос
/ 23 апреля 2010

Я не вижу, где объявлено tblCell, и это может быть одной из многих проблем с вашим кодом.Прежде всего вам нужно сделать что-то вроде:

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = (MyTableCell *)[nib objectAtIndex:0];
}

Вы просто загружаете перо, но не извлекаете из него ячейку.

- Обновление -

Вам также следует проверить свою пользовательскую ячейку в IB на наличие ошибок или неправильных привязок.

0 голосов
/ 14 сентября 2012

Ссылка: Пристальный взгляд на ячейки табличного представления

Если вы загружаете свою собственную пользовательскую ячейку, "Важным атрибутом, который нужно установить для программной части этой процедуры, является свойство тега каждого объекта. Найдите это свойство в разделе" Вид "панели" Атрибуты "и назначьте каждому объекту уникальное целое число. "

Теперь получите ваш ярлык вот так (Я полагаю, вы назначаете тег = 1 для метки)

UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
cellLabel.text = @"Your text goes here"
0 голосов
/ 23 апреля 2010

Я думаю, loadNibNamed: nethod по какой-то причине возвращает ноль. Таким образом, полученный объект ячейки тоже ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...