Ошибка «0» при прокрутке таблицы с изображениями - PullRequest
0 голосов
/ 09 апреля 2010

У меня проблема при прокрутке изображений в виде таблицы.

Я получаю ошибку «0».

Я думаю, это связано с некоторыми проблемами с памятью, но я не могу найти точную ошибку Код выглядит следующим образом:

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

    UITableViewCell *cell = [travelSummeryPhotosTable dequeueReusableCellWithIdentifier:CellIdentifier];

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

    }

    //Photo ImageView
    UIImageView *photoTag = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 5.0, 85.0, 85.0)];

    NSString *rowPath =[[imagePathsDictionary valueForKey:[summaryTableViewDataArray objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];

    photoTag.image = [UIImage imageWithContentsOfFile:rowPath];
    [cell.contentView addSubview:photoTag];

    [photoTag release];

    // Image Caption
    UILabel *labelImageCaption = [[UILabel alloc] initWithFrame:CGRectMake(110.0, 15.0, 190.0, 50.0)];
    labelImageCaption.textAlignment = UITextAlignmentLeft;
    NSString *imageCaptionText =[   [imageCaptionsDictionary valueForKey:[summaryTableViewDataArray objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
    labelImageCaption.text = imageCaptionText;
    [cell.contentView addSubview:labelImageCaption];
    [labelImageCaption release];

    return cell;

}   

Заранее спасибо.

1 Ответ

2 голосов
/ 09 апреля 2010

Ошибка сигнала «0» обычно означает, что приложение аварийно завершилось из-за нехватки памяти.

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

Чтобы решить вашу проблему, вы должны создать подпредставления ячейки только один раз - при создании и позже просто настройте их содержимое:

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

    UITableViewCell *cell = [travelSummeryPhotosTable dequeueReusableCellWithIdentifier:CellIdentifier];

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

        UIImageView *photoTag = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 5.0, 85.0, 85.0)];
        photoTag.tag = 10;
        [cell.contentView addSubview:photoTag];
        [photoTag release];

        UILabel *labelImageCaption = [[UILabel alloc] initWithFrame:CGRectMake(110.0, 15.0, 190.0, 50.0)];
        labelImageCaption.tag = 11;
        labelImageCaption.textAlignment = UITextAlignmentLeft;
        [cell.contentView addSubview:labelImageCaption];
        [labelImageCaption release];
    }

    //Photo ImageView
    NSString *rowPath =[[imagePathsDictionary valueForKey:[summaryTableViewDataArray objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
    UIImageView* photoTag = (UIImageView*)[cell.contentView viewWithTag:10];
    photoTag.image = [UIImage imageWithContentsOfFile:rowPath];

    // Image Caption
    UILabel *labelImageCaption = (UILabel*)[cell.contentView viewWithTag:11];
    NSString *imageCaptionText =[   [imageCaptionsDictionary valueForKey:[summaryTableViewDataArray objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
    labelImageCaption.text = imageCaptionText;

    return cell;
}   
...