Я пытаюсь получить значение данных PHAssetResource
, чтобы я мог сделать CGImageSource
с ним так:
let resources = PHAssetResource.assetResources(for: imageAsset)
let fullSizePhotoResources = resources.filter { $0.type == .fullSizePhoto }
let targetResource = fullSizePhotoResources[0]
let resourceManager = PHAssetResourceManager()
resourceManager.requestData(for: targetResource, options: nil, dataReceivedHandler: { (resourceData) in
let imageSource = CGImageSourceCreateWithData(resourceData as CFData, nil)
print("data: \(resourceData)")
handler(self.getDataFromImageSource(imageSource: imageSource))
}) { (inError) in
if inError != nil {
//handle error
}
}
однако вместо того, чтобы возвращать один объект данных, я получаю три. Таким образом, оператор print печатает это:
data: 1048576 bytes
data: 972120 bytes
data: 0 bytes
Я не уверен, что все эти три объекта, но только первый из них приводит к CGImageSource
, который я хочу. Проблема в том, что у меня нет возможности остановить запрос, когда я получаю первый объект, поэтому он продолжает вызывать обработчик снова и снова. Я попытался вызвать метод cancelDataRequest внутри getDataFromImageSource, но я получаю сообщение об ошибке, говорящее о том, что данные не были полностью загружены. Есть идеи?