ios - 是否可以同时填充两个数组?

标签 ios arrays swift

我有两个数组:

var originalImagesArray = [UIImage]()
var croppedImagesArray = [UIImage]()

然后我将它们填写为:

for i in from..<to {
        let asset: PHAsset = self.images[i] as! PHAsset
        let imageFetchOptions = PHImageRequestOptions()

        self.imageManager.requestImageForAsset(asset, targetSize: CGSize(width: 50, height: 50), contentMode: .AspectFit, options: imageFetchOptions, resultHandler: { (image: UIImage?, info: [NSObject : AnyObject]?) in
            if (image != nil) {
                print("Little: \(image!.description)")
                self.croppedImagesArray.append(image!)
            }
        })

        self.imageManager.requestImageForAsset(asset, targetSize: CGSize(width: 600, height: 600), contentMode: .AspectFit, options: imageFetchOptions, resultHandler: { (image: UIImage?, info: [NSObject : AnyObject]?) in
            if (image != nil) {
                print("Big: \(image!.description)")
                self.originalImagesArray.append(image!)
            }
        })
    }

因此,在一个阵列中我以 50x50 的尺寸保存图像,而在另一个阵列中以 600x600 的尺寸保存图像。

问题是,当我稍后在 didSelect 中显示图像时,我得到了 2 个不同的图像。

例如,在索引 5 的 cropped 数组中,我得到一张图片,但在索引 5 的 original 中,我得到另一张图片。

我希望那是两张相同的图片。我怎样才能做到这一点?

1 解决方案是以相同方式对 2 个数组中的图像进行排序 2 解决方案是我以错误的方式做所有这些。在那种情况下我需要什么?

最佳答案

来自 PHImageManager.requestImageForAsset 的文档:

By default, this method executes asynchronously. If you call it from a background thread you may change the synchronous property of the options parameter to YES to block the calling thread until either the requested image is ready or an error occurs, at which time Photos calls your result handler.

问题是您正在按照您希望的顺序调用 requestImageForAsset,但它们是异步完成的,这可能会以不同的顺序填充数组,具体取决于先完成的大小。

如果您希望它们按相同的顺序排列,我建议将 croppedImagesArrayoriginalImagesArray 更改为由您可以在它们之间共享的内容键入的字典。例如,如果 Assets 的实际顺序无关紧要,只要它们在两个集合之间相同,您可以按 Assets 的 localIdentifier 键,然后按该标识符对字典进行排序您枚举集合。如果实际顺序很重要,请传递一些其他序列键(可能是当前时间戳)并在两个完成处理程序之间共享它。

关于ios - 是否可以同时填充两个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704576/

相关文章:

javascript - 为什么 Javascript 对象点表示法会导致错误?

c# - 如何检查此数组中的重复答案? C#

ios - NSInternalInconsistencyException 与自动布局

ios - 为什么 React Native/Objective-C 提示我用错误数量的参数调用我的方法?

ios - 如何从数组快速生成字典

iOS App被拒绝,如何获得下载全网内容的权限?

ios - 音频在 MPMoviePlayerController 音频流上不断停止

ios - 我需要做些什么才能在我的非弧形项目中通过 Cocoapods 使用 RestKit 2.0 吗?

python - Numpy searchsorted降序

在 Nav 和 Tab Controller 之间快速传递数据