照片框架工作异常。

时间:2015-10-02 13:31:38

标签: ios objective-c nsmutablearray photosframework phasset

我正在使用Photos框架从相机胶卷中选择照片。从网格中选择资源后,我使用PHImageManager访问每个选定的图像,然后将这些图像存储在数组中以显示在我的集合视图中。

我正在使用这段代码来实现: -

-(void)extractFullSizeImagesFromAssets{

    PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init];
    options.version = PHImageRequestOptionsVersionCurrent;
    options.deliveryMode =  PHImageRequestOptionsDeliveryModeHighQualityFormat;
    options.resizeMode = PHImageRequestOptionsResizeModeExact;
    options.networkAccessAllowed =  TRUE;



    for (int i = 0; i < self.assets.count; i++) {
        PHAsset * asset = [self.assets objectAtIndex:i];
        CGSize fullSizeImage = CGSizeMake(1000, (asset.pixelHeight / asset.pixelWidth) * 1000);


        [[PHImageManager defaultManager] requestImageForAsset:asset
                                   targetSize:fullSizeImage
                                  contentMode:PHImageContentModeAspectFit
                                      options:options
                                resultHandler:^(UIImage *image, NSDictionary *info){
                                   // [self.arr_images addObject:image];
                                    [_arr_fullSizeImages addObject:image];

        }];

    }
} 

现在我的阵列&#34; arr_fullSizeImages&#34;包含以不同的随机顺序提取的图像,而不是我在拾取资产时选择的方式。例如如果我从相机胶卷中选择了5张图像,则有时在相机胶卷中索引为3的所选图像将保存在arr_fullSizeImages中的索引5上。 我无法跟踪此行为的原因。请确定错误的来源以及如何解决此错误。

感谢。

1 个答案:

答案 0 :(得分:2)

这是默认情况下异步执行requestImageForAsset的预期行为。 如果您想要同步行为(并且没有随机顺序),只需设置

即可
options.synchronous = YES;