iOS - загрузка пользовательской ячейки таблицы приводит к ошибке при второй загрузке - PullRequest
2 голосов
/ 23 октября 2011

Я работаю над приложением для iPad с табличным представлением со стандартными ячейками. Когда выбрана настраиваемая ячейка, она должна развернуться и загрузить настраиваемый файл пера. Это хорошо, для первого выбора.

Если я выбираю стандартную ячейку, она прекрасно загружает перо, и если я выбираю ее снова, она возвращается к нормальной работе, при второй загрузке выдает ошибку EXC_BAD_ACCESS (я не думаю, что когда-либо получу ошибки xcodes кажись наиболее абстрактным).

Мой код приведен ниже, и строка указана, когда он удаляет ячейку для повторного использования, 3-я строка:

if([listCells objectAtIndex:indexPath.row] == @"open") {
        NSLog(@"Loading open cell at %i", indexPath.row);
        CustomMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomMessageCell"];
        //Loads the nib file and grabs the last object, presumably the table cell, as it is the only object in the file.
        if(cell==nil) {
            cell = [[[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" owner:self options:nil] lastObject] autorelease];
        }
        UILabel *message = (UILabel *) [cell viewWithTag:1];
        UIButton *approve = (UIButton *)[cell viewWithTag:4];
        message.text = @"Test";
        return cell;

Любая помощь очень ценится, спасибо!

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Вы скомпилировали и запустили на реальном устройстве?Иногда вы получаете больше информации, чем просто запускаете симуляцию.

Также другие вещи, которые нужно проверить:

  • , вы должны убедиться, что Идентификатор Nib-файла в IB правильно установлен на CustomMessageCell,
  • Убедитесь, что ваши идентификаторы подпредставлений в IB установлены правильно.
  • Обратите внимание, что вы не должны автоматически освобождать ячейку, поскольку она уже автоматически освобождена, как возвращено методом lastObject.Это может вызвать еще одну причину сбоя.

Попробуйте также запустить свое приложение (на реальном устройстве) и профилировать его, используя Zombies, а затем - инструменты профилирования Leaks.(Вместо «Выполнить» выберите «Профиль»).

Надеюсь, это поможет.

0 голосов
/ 23 октября 2011

Вы не должны autorelease ячейку в этой строке:

cell = [[[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" 
                                 owner:self options:nil] lastObject] autorelease];

Просто создайте так:

cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" 
                               owner:self options:nil] lastObject];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...