Это код, который я запускаю в viewDidAppear совершенно нового быстрого приложения. info.plist
правильно настроен с помощью клавиши Privacy - Photo Library Usage Description
.
Я получаю ошибку The operation couldn’t be completed. (Cocoa error -1.)
Я могу создавать новые активы, удалять активы, избранные активы и возвращать активы... но попытка изменить их содержимое приводит к этой ошибке. Я пытался найти в Интернете любую подсказку о том, как решить эту проблему (переполнение стека, видео WWDC, вторая страница Google, bing и даже yahoo).
PHPhotoLibrary.requestAuthorization { (status:PHAuthorizationStatus) in
if status != PHAuthorizationStatus.authorized { return }
let results = PHAsset.fetchAssets(with: nil)
guard let asset = results.firstObject else { return }
if asset.canPerform(.content) {
let inputOptions = PHContentEditingInputRequestOptions()
inputOptions.isNetworkAccessAllowed = true
inputOptions.canHandleAdjustmentData = { (asjustmentData) -> Bool in
return false
}
asset.requestContentEditingInput(with: inputOptions, completionHandler: { (input, info) in
guard let input = input else { return }
guard let inputImageURL = input.fullSizeImageURL,
let inputImage = CIImage(contentsOf: inputImageURL) else { return }
guard let eagle = EAGLContext(api: .openGLES2) else { return }
let context = CIContext(eaglContext: eagle)
guard let outputImageRef = context.createCGImage(inputImage, from: inputImage.extent) else { return }
let outputImage = UIImage(cgImage: outputImageRef, scale: 1.0, orientation: .right)
let output = PHContentEditingOutput(contentEditingInput: input)
guard let imageData = UIImageJPEGRepresentation(outputImage, 0.9) else { return }
try! imageData.write(to: output.renderedContentURL, options: .atomic)
output.adjustmentData = PHAdjustmentData(formatIdentifier: "myFormat", formatVersion: "1.0", data: Data())
DispatchQueue.main.async {
PHPhotoLibrary.shared().performChanges({
let request = PHAssetChangeRequest(for: asset)
request.contentEditingOutput = output
}, completionHandler: { (success, error) in
print(success ? "It worked" : "It failed with error:")
print(error?.localizedDescription ?? "No Errors!")
})
}
})
}
}
ПРИМЕЧАНИЕ при возврате появляется диалоговое окно iOS «Вы хотите изменить», однако с приведенным выше кодом диалоговое окно не появляется, и приложение не аварийно завершает работу.