iOS: пользовательская ячейка lldb EXC_BAD_ACCESS

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"LibraryListingCell";

    InSeasonCell *cell = (InSeasonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"InSeasonCellView" owner:self options:nil];
        cell = [_cell autorelease];
        _cell = nil;
    }
    if(_dataController!=NULL){
        Product *productAtIndex = [_dataController objectInListAtIndex:indexPath.row];
        // Configure the cell...
        if (productAtIndex.name != nil && productAtIndex.week != nil && productAtIndex.image != nil) {
            cell.name.text = productAtIndex.name;
            cell.week.text = productAtIndex.week;
            cell.image.image = productAtIndex.image;
        }
    }

    return cell;
}

Сообщение ERROR для cell.name.text cell.week.text cell.image.text. Почти уверен, что это ошибка управления памятью. Я сохранил и выпустил должным образом, насколько мне известно. Приложение вылетает при запуске, иногда загружает все нормально, но при прокрутке вылетает. Любая помощь или указатели об управлении памятью приветствуются.


person wwjdm    schedule 31.03.2013    source источник


Ответы (1)


Вместо этого:

 if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"InSeasonCellView" owner:self options:nil];
    cell = [_cell autorelease];
    _cell = nil;
  }

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

Думаю должно быть так:

static NSString *CellIdentifier = @"LibraryListingCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
person Anoop Vaidya    schedule 31.03.2013
comment
_cell — это настраиваемый UITableViewCell, и я обращаюсь к нему как к IBOutlet. Я не думаю, что мне нужно выпускать IBOutlet или выделять его. Я попытаюсь использовать IBOutlet, не выпуская его. - person wwjdm; 31.03.2013
comment
Я использовал этот учебник iphonedevcentral.com/. - person wwjdm; 31.03.2013
comment
Есть пользовательская ячейка .h .m и файл xib. Как мне загрузить это (пользовательский xib) вместо создания нового UITableViewCell - person wwjdm; 31.03.2013