iOS UITableView вылетает при прокрутке - PullRequest
0 голосов
/ 05 октября 2011

Я столкнулся со странной проблемой здесь.Я разрабатываю приложение для iOS (в частности, для iPad) и в какой-то момент использую UITableView для отображения списка вещей.

Теперь, когда я прокручиваю границы экрана (невыше первого элемента, а не ниже последнего) все работает нормально.Тем не менее, он просто сильно падает, когда я прокручиваю дальше, без других сообщений, кроме:

  • EXC_BAD_ACCESS , когда я прокручиваю вниз до последнего элемента
  • SIGABRT с обратным ходом, когда я прокручиваю выше, чем первый

Я посмотрел в Google, и кажется, что я выпускаю некоторые объекты слишком много, но я не могу понять,какие.

Я также пытался запустить приложение внутри Инструментов, но окно Инструментов просто зависает при каждом запуске приложения, заставляя меня убить его вручную ... И, конечно, я не получил результатов...

Вот немного кода:

    /*
     Returns the cells of the table view
     */
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Create a new cell view
        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }

        // Configure the cell...
        cell.textLabel.text = [newestModules objectAtIndex:indexPath.row];
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"Background-Texture-Dark-Small.png"]];
        cell.imageView.image = [UIImage imageNamed:@"Icon-Maths.png"];

        UIView *v = [[[UIView alloc] initWithFrame:cell.frame] autorelease];

        // Set view background color
        v.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background-Texture-Dark-Small.png"]];

        // This view will be activated when the cell is selected
        cell.selectedBackgroundView = v;

        return cell;
    }

РЕДАКТИРОВАТЬ: UITableView Методы загрузки и выгрузки:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Transparent background
    self.tableView.backgroundView = nil;

    // Generate list of newest modules. Will later look for them on the internet, but for now we only add some test examples.
    newestModules = [[NSMutableArray alloc] initWithObjects:@"Test 1", @"Test 2", @"Test 3", @"Test 4", @"Test 5", nil];
}

- (void)viewDidUnload
{
    [newestModules release];
    [super viewDidUnload];
}

Ответы [ 2 ]

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

Похоже, что когда вы добавляете объект, например, новый контроллер, в Интерфейсный Разработчик, он автоматически освобождается по умолчанию.

Если вы не связываете егос сохраненным свойством внутри класса, он освобождается сразу после своей инициализации, вызывая страшную ошибку EXC_BAD_ACCESS .

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

Из опыта видно, что большая разница между прокруткой в ​​границах и в границах заключается в том, что в границах она проходит через все элементы таблиц, включая верхний и нижний колонтитулы, и, скорее всего, пересчитывает количество строк. Если у вас есть верхний и нижний колонтитулы, попробуйте поставить точки останова там.

Что касается EXC_BAD_ACCESS, вы можете поставить точку останова в malloc_error_break, чтобы, надеюсь, узнать больше о том, кто не был правильно освобожден. Это символическая точка останова, которую можно определить с помощью кнопки «+» в окне точек останова.

...