0

我正在使用 assets 枚举器块来填充两个数组;一个用于库资源,一个用于全屏图片。_albumAssets数组用作一个collectionView的数据源,而_albumPics用作我的详细滚动视图的数据源。因为我在同一个块的两个数组中添加元素,所以性能很差。我认为直接从块中将对象添加到我的数组是可以的,因为块在单独的线程中执行。所以我想出了这个代码,也许这是一件愚蠢的事情,我不确定。我的表现提高了很多,但遗憾的是现在我得到了NSRangeException因此,我们将不胜感激任何帮助或建议。奇怪的是我只是有时会得到这个,这意味着我通过点击我的collectionView中的缩略图来展示我的详细 ScrollViewController 。当我开始浏览我的图像时,有时会出现异常,有时不会...

-(void)enumerateAssetsFromGroup:(ALAssetsGroup *)group
{

    [_albumAssets removeAllObjects];
    [_albumPics   removeAllObjects];

    void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
    {
        if (result != NULL) {
            [_albumAssets addObject: result];
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            ALAssetRepresentation *assetRep = [result defaultRepresentation];
            img = [UIImage imageWithCGImage:[assetRep fullScreenImage]];
            [_albumPics addObject:img];
        });

    }

        [self.collectionView reloadData];
};

    [group enumerateAssetsUsingBlock: assetEnumerator];
}
4

1 回答 1

1

是一个如何异步加载表格视图单元格的教程。
因此,您可以首先使用无法选择的灰色缩略图加载表格视图单元格,然后将显示更改为正常,并在异步加载相应图像后立即将其选中。然后用户有一个关于所有图像的缩略图概览,以及其中哪些已经可用。

于 2013-04-06T05:58:02.427 回答