首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >assetsLibrary是一个简单的bug吗?

assetsLibrary是一个简单的bug吗?
EN

Stack Overflow用户
提问于 2013-02-27 02:34:24
回答 1查看 849关注 0票数 3

我真的迷路了。为什么我为每个UIImage获取两次NSLog?

代码语言:javascript
复制
 //------ get the images from the camera roll ----------
    assets=[[NSMutableArray alloc]init];
    NSMutableArray *cameraRollPictures=[[NSMutableArray alloc]init];
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop)
    {

        NSInteger numberOfAssets = [group numberOfAssets];
        NSLog(@"NUM OF IMAGES:%d",numberOfAssets);
        if (numberOfAssets > 0)
        {


            for (int i = 0; i <= numberOfAssets-1; i++)
            {

                [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
                 {
                    UIImage *thumbnail = [UIImage imageWithCGImage:[result thumbnail]];
                    [assets addObject:thumbnail];
                     NSLog(@"theObject!!!! -- (%d) %@",i,thumbnail);

            //******* for each i its here twice !!   ********

                }];
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-27 03:08:09

由于某些原因,enumerateAssetsAtIndexes (和enumerateAssetsUsingBlock)在枚举的末尾使用result == nilindex == NSNotFound执行额外的块调用。如果将NSLog()更改为

代码语言:javascript
复制
NSLog(@"i=%d, index=%ld, result=%@", i, (unsigned long)index, result);

然后,您将获得输出

代码语言:javascript
复制
NUM OF IMAGES:2
i=0, index=0, result=ALAsset - Type:Photo, URLs:assets-library://asset/asset.PNG?id=...
i=0, index=2147483647, result=(null)
i=1, index=1, result=ALAsset - Type:Photo, URLs:assets-library://asset/asset.PNG?id=...
i=1, index=2147483647, result=(null)

因此,您必须检查result的值并忽略nil值:

代码语言:javascript
复制
for (int i = 0; i <= numberOfAssets-1; i++) {
     [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
      {
          if (result != nil) {
              UIImage *thumbnail = [UIImage imageWithCGImage:[result thumbnail]];
              [assets addObject:thumbnail];
          }
      }];
}

请注意,您可以将枚举简化为

代码语言:javascript
复制
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
     if (result != nil) {
         UIImage *thumbnail = [UIImage imageWithCGImage:[result thumbnail]];
         [assets addObject:thumbnail];
     }
}];
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15096662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档