簡體   English   中英

UICollectionView錯誤訪問 - > UICollectionViewData _setLayoutAttributes:atGlobalIndex:

[英]UICollectionView bad acces on -> UICollectionViewData _setLayoutAttributes:atGlobalIndex:

我使用UICollectionView顯示批量為32的大量圖像。每當我到達集合視圖的末尾時,我加載另一批32個圖像並調整collectionView contentsize.width的大小以接受新項目。 通過使用AFNetworking調用Web服務來進行加載。

當我從開始到結束非常快速地滾動到結束到開始時,我收到一個EXC_BAD_ACCESS。 它到達CollectionView的末尾時也會發生。 它就像它試圖加載一些尚未可用的屬性。 我試圖從1天開始弄清楚它沒有任何成功。 我嘗試使用instrument / NSZombie啟用/ guardmalloc ...

編輯

還有一個非常奇怪的想法:只有當我用真正的UICollectionView替換PSTCollectionView時才會出現這種糟糕的訪問。 因此,為了確保我只是反向移動並用PSTCollectionView替換UICollectionView並且badaccess消失了。 我完全迷失了:)

結束編輯

我在項目中使用弧和非弧文件。 我能夠發現的唯一想法是這個堆棧跟蹤: 在此輸入圖像描述

您的幫助不僅僅是歡迎。

大段引用

問題可能是圖像太大了。 您可能想要做的是在每個UIImageView上設置圖像屬性之前從下載的圖像調整圖像大小。

Bill Dudney發表了一篇非常有用的關於該主題的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使用AFNetworking類別直接從URL設置圖像,則可能需要使用備用方法,以便可以干預圖像並調整圖像大小。 下面的代碼會這樣做。

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
}];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM