从 URL 下载图像并将其保存到 Core Data swift

时间:2021-07-25 08:08:05

标签: swift image core-data

我正在尝试从 URL 下载图像并将其保存到模型变量中。但它没有设置图像。在 setImage 中,我看到它正在下载一些数据。 URL 已检查并正常工作。但是当我检查它是否为零时,它显示“空输入”、“空输出”。

let inputImage = UIImageView()
    let outputImage = UIImageView()

    DispatchQueue.main.async {
        let inputURL = URL(string: "someURL")
        let outputURL = URL(string: "someURL")
        inputImage.kf.setImage(with: inputURL)
        outputImage.kf.setImage(with: outputURL)
    }
    let coreDataModel = CoreDataModel()
    
    if let inputImageData = inputImage.image?.pngData()
    {  cloudAnalysisModel.input_image = inputImageData  }
    else
    {  print("empty input")  }
    
    if let outputImageData = outputImage.image?.pngData()
    {  coreDataModel.output_image = outputImageData   }
    else
    {  print("empty output")  }

1 个答案:

答案 0 :(得分:0)

我想你还没有理解异步编程是如何工作的。块或completionHandler(以{开头并以}结尾的)在url被调用并获得响应后被执行

我在这里想说的是,该块可能随时执行,之后的代码会立即执行,即从 let coreDataModel 开始的代码

所以很明显 inputImageDataoutputImageData 都将为空

现在进入解决方案:

你可以做的是:

  1. 将回调块中的所有代码移到回调块内,而不是将其保留在外面,并向用户显示一些进度条或 UI
  2. 使用 DispatchGroup 来跟踪 DispatchQueue More info here
相关问题