Ячейка метода табличного представления для строки в пути индекса снова загружается и затем сбой приложения - PullRequest
0 голосов
/ 24 июня 2011

В моем приложении у меня есть представление таблицы и 4 изображения в одной строке.Когда я прокручиваю табличное представление, снова вызывается метод ячейка для строки в индексном пути, а затем приложение вылетает.Как я могу предотвратить перезагрузку табличного представления при прокрутке.Моя часть кода: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = nil;
    static NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";


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

        for (int i=0; i <= [wordsInSentence count]; ++i) {
            UIImageView *imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(30+90*(i%4), 15, 80, 100)] autorelease] ;
            imageView1.tag = i+1;

            [imageViewArray insertObject:imageView1 atIndex:i];
            [cell.contentView addSubview:imageView1];
        }

    }

    int photosInRow;

    if ( (indexPath.row < [tableView numberOfRowsInSection:indexPath.section] - 1) || ([wordsInSentence count] % 4 == 0) ) {
        photosInRow = 4;
    } else {
        photosInRow = [wordsInSentence count] % 4;
    }

    for ( int i = 1; i <=photosInRow ; i++ ){
        imageView = (UIImageView *)[cell.contentView viewWithTag:j];
        [self showImage:imageView];
    }

    return cell;
}

Пожалуйста, помогите.Любая помощь будет оценена.

Спасибо, Кристи

1 Ответ

1 голос
/ 24 июня 2011

Единственная проблема, которую я вижу, это

for ( int i = 1; i <= photosInRow ; i++ ){
    imageView = (UIImageView *)[cell.contentView viewWithTag:j];
    [self showImage:imageView];
}

Что здесь j? Я предлагаю вам изменить это на i, т.е.

for ( int i = 1; i <=photosInRow ; i++ ){
    imageView = (UIImageView *)[cell.contentView viewWithTag:i];
    [self showImage:imageView];
}

В качестве единственного другого недостатка я вижу здесь логику,

for (int i=0; i <= [wordsInSentence count]; ++i) {
    UIImageView *imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(30+90*(i%4), 15, 80, 100)] autorelease] ;
    imageView1.tag = i+1;

    [imageViewArray insertObject:imageView1 atIndex:i];
    [cell.contentView addSubview:imageView1];
}

Вам нужно всего лишь добавить 4 просмотра изображений подряд. Не общее количество просмотров изображений в каждой строке. Это ошибочная логика. Предлагаемое обновление до

for (int i = 0; i < 4; ++i) {
    UIImageView *imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(30+90*(i%4), 15, 80, 100)] autorelease] ;
    imageView1.tag = i+1;

    int trueImageIndex = indexPath.row * 4 + i;
    [imageViewArray insertObject:imageView1 atIndex:trueImageIndex];

    [cell.contentView addSubview:imageView1];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...