Плохой доступ к UICollectionView -> UICollectionViewData _setLayoutAttributes:atGlobalIndex:

Я использую UICollectionView для отображения большого количества изображений с партией 32. Каждый раз, когда я достигаю конца представления коллекции, я загружаю другую партию из 32 изображений и изменяю размер collectionView contentsize.width, чтобы принимать новые элементы. Загрузка осуществляется путем вызова веб-службы с AFNetworking.

Когда я прокручиваю очень быстро от начала до конца и до конца и до начала, я получаю EXC_BAD_ACCESS. Это также произошло, когда достигли конца CollectionView. Как будто он пытается загрузить некоторые атрибуты, которые еще не доступны. Я пытался понять это с 1 дня безуспешно. Я пытался с инструментом / NSZombie включен / guardmalloc ...

РЕДАКТИРОВАТЬ

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

КОНЕЦ РЕДАКТИРОВАНИЯ

Я использую как дуги, так и не дуговые файлы в проекте. Единственная мысль, которую я могу определить, - это трассировка стека: введите описание изображения здесь

Ваша помощь будет более чем приветствовать.

Blockquote

1 ответ

Проблема может заключаться в том, что изображения слишком велики. Что вы можете сделать, это изменить размер изображения из загруженного изображения перед установкой свойства изображения в каждом UIImageView.

Билл Дадни опубликовал очень полезную книгу iBook на эту тему, в которой подробно рассматриваются последствия изображений для памяти и способы их оптимизации. Это $4,99 и очень полезно.

https://itunes.apple.com/us/book/all-image-io-you-need-to-know/id601759073?mt=11

Следующий метод изменит размер изображения до заданного размера, что уменьшит объем памяти и, надеюсь, предотвратит вашу проблему.

- (UIImage *)resizeImage:(UIImage *)image size:(CGSize)size {
    UIGraphicsBeginImageContext(size);
    [image drawInRect: CGRectMake(0, 0, width, height)];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resizedImage;
}

Теперь, если вы используете AFNetworking для установки изображения непосредственно из URL-адреса с использованием категории AFNetworking, вы можете использовать альтернативный метод, чтобы вы могли вмешаться и изменить размер изображения. Код ниже сделает это.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:imageURL];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

[imageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    // resize image
    // set image on imageView
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    // handle error
}];
Другие вопросы по тегам