繁体   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