gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:52 24 4
gpt4 key购买 nike

我有两个数组:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com