Изображение на столе после загрузки

У меня есть таблица и изображение на камеру. У меня проблема при попытке вернуть heightForRowAtIndexPath (изображение не той же высоты)

это мой класс, это будет сбой, когда я попытаюсь прокрутить вниз. "2016-07-07 21: 44: 16.990 xem.vn [1725: 25586] * Завершение работы приложения из-за необработанного исключения" NSRangeException ", причина: '* - [__ NSArrayM objectAtIndex:]: индекс 2 за пределами [0 .. 1]"

- (void)viewDidLoad {
    [listImage addObject:@"https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/leisa_christmas_false_color.png?itok=Jxf0IlS4"];
    [listImage addObject:@"https://pixabay.com/static/uploads/photo/2015/10/01/21/39/background-image-967820_960_720.jpg"];
    [listImage addObject:@"https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/idcs1426.jpg?itok=Gc_-Q58L"];
    [listImage addObject:@"https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/leisa_christmas_false_color.png?itok=Jxf0IlS4"];
    [listImage addObject:@"https://pixabay.com/static/uploads/photo/2015/10/01/21/39/background-image-967820_960_720.jpg"];
    [listImage addObject:@"https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/idcs1426.jpg?itok=Gc_-Q58L"];
    [listImage addObject:@"https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/leisa_christmas_false_color.png?itok=Jxf0IlS4"];
    [listImage addObject:@"https://pixabay.com/static/uploads/photo/2015/10/01/21/39/background-image-967820_960_720.jpg"];
    [listImage addObject:@"https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/idcs1426.jpg?itok=Gc_-Q58L"];
    imageHeights = [[NSMutableArray alloc]init];
    [self setDefaultRowHeights];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [listImage count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"newTableViewCell";
    newTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = (newTableViewCell *)[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil][0];
    }
    NSString *imageURL = listImage[indexPath.row];
    __weak newTableViewCell *weakCell = cell;
    __weak typeof(self) weakSelf = self;
    [cell.NewsImageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]]
                              placeholderImage:[UIImage new]
                                       success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                                           weakCell.NewsImageView.image = image;
                                           NSInteger oldHeight = [imageHeights[indexPath.row] integerValue];
                                           NSInteger newHeight = (int)image.size.height;
                                           if (image.size.width != CGRectGetWidth(weakCell.NewsImageView.bounds)) {
                                               CGFloat ratio = image.size.height / image.size.width;
                                               newHeight = CGRectGetWidth(self.view.bounds) * ratio;
                                           }

                                           if (oldHeight != newHeight) {
                                               imageHeights[indexPath.row] = @(newHeight);
                                               [weakSelf.NewsTableView beginUpdates];
                                               [cell layoutIfNeeded];
                                               [weakSelf.NewsTableView endUpdates];
                                           }
                                       } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                                           NSLog(@"Error: %@\nFetching image with url: %@", error, request.URL);
                                       }];
    return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [imageHeights[indexPath.row] integerValue];
}
- (void)setDefaultRowHeights {
    imageHeights = [NSMutableArray arrayWithCapacity:listImage.count];
    for (int i = 0; i < listImage.count; i++) {
        imageHeights[i] = @(self.NewsTableView.rowHeight);
    }
}

спасибо за помощь!!

1 ответ

Решение

Я полагаю, что авария связана с вашей imageHeights а также listImage с разным номером товара. После viewDidLoad работает, ваш listImage есть 8 предметов, но imageHeights 0 пункт даже после запуска setDefaultRowHeights,

imageHeights = [NSMutableArray arrayWithCapacity:listImage.count] только скажем, что imageHeights будет содержать тот же объект подсчета, что и listImage, но количество отсчетов в imageHeights все еще 0.

Я не уверен, если self.NewsTableView настроен правильно. Предполагая, что это правильно, setDefaultRowHeights должно быть написано так:

- (void)setDefaultRowHeights {
    imageHeights = [NSMutableArray arrayWithCapacity:listImage.count];
    for (int i = 0; i < listImage.count; i++) {
      [imageHeights addObject:@(self.NewsTableView.rowHeight)];
    }
}
Другие вопросы по тегам