【问题标题】:Swift mapview cannot display thumbnail imageSwift mapview 无法显示缩略图
【发布时间】:2020-07-07 20:42:09
【问题描述】:

我正在将图像写入文件并在 mapview didSelect 方法中回读,它给出了图像数据读取错误。

 var localImageFileUrl: URL? = nil

            do {
                delegate.documentDirectoryUrl = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)

                if let data = aStruct.imageData  {
                    localImageFileUrl =  delegate.documentDirectoryUrl!.appendingPathComponent("Image.png")
                    UserDefaults.standard.set(localImageFileUrl, forKey: "localImageFileUrl")
                    try data.write(to: localImageFileUrl!)
                }

            }
            catch {
                print("error")
            }

在这里测试它工作正常。

          do{
                 print("imageUrl0: \(localImageFileUrl)")
                let imageData: Data = try Data(contentsOf: localImageFileUrl as! URL)
                let image = UIImage(data: imageData)
               print(image)
            }catch{
                print("Unable to load image data: \(error)")
            }

调试窗口输出:

imageUrl0: 可选(file:///var/mobile/Containers/Data/Application/19A5A226-3CAF-4DC0-9015-40278703C5BA/Documents/Image.png)

可选(, {120, 120}) 工作正常。

我通过这样的结构传递数据:

   let endPtPin = GpsData.MyEndPt(latitude:  Double(latitudeStr) as! Double, longitude: Double(longitudeStr) as! Double, url: localImageFileUrl! as NSURL)

在mapview的didSelect方法中,我提取url,并尝试访问图像,但它给出了错误:

 func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

     DispatchQueue.main.async {
        if let thumbnailImageButton = view.leftCalloutAccessoryView as? UIButton,
        let url = (view.annotation as? GpsData.MyEndPt)?.thumbnailUrl
         {
            print("imageUrl: \(url)")
            do{
                let imageData: Data = try Data(contentsOf: url as URL)
                let image = UIImage(data: imageData)
                    thumbnailImageButton.setImage(image, for: UIControlState.normal)

            }catch{
                print("Unable to load image data: \(error)")
            }
        }
    }
}

调试窗口报错:

图片网址: 可选(file:///var/mobile/Containers/Data/Application/19A5A226-3CAF-4DC0-9015-40278703C5BA/Documents/Image.png) 2020-03-27 00:07:04.079576-0500 r2nr[9945:4518812] NSURLConnection 以错误结束 - 代码 -1002

2020-03-27 00:07:07.009134-0500 r2nr[9945:4518751] CFURLCopyResourcePropertyForKey 失败,因为它传递了一个 URL 没有方案

无法加载图像数据:错误域=NSCocoaErrorDomain 代码=256 “无法打开文件‘Image.png)’。” UserInfo={NSURL=Optional(file:///var/mobile/Containers/Data/Application/19A5A226-3CAF-4DC0-9015-40278703C5BA/Documents/Image.png)}

文件路径未更改,但无法从文件中读取图像数据。怎么了?

【问题讨论】:

    标签: ios swift mapkit mkmapview


    【解决方案1】:

    我花了几个小时找到了工作的方法。 我正在以数据的形式访问图像数据

    if let data = aStruct.imageData  {
          localImageFileUrl =  delegate.documentDirectoryUrl!.appendingPathComponent("Image.png")
          UserDefaults.standard.set(localImageFileUrl, forKey: "localImageFileUrl")
          try data.write(to: localImageFileUrl!)
     }
    

    我像这样将数据转换为 PNG 格式,效果很好:

      do {
            delegate.documentDirectoryUrl = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
           let image = UIImage(data: aContactStruct.imageData!)
    
           if let data = UIImagePNGRepresentation(image!){{
                 localImageFileUrl =  delegate.documentDirectoryUrl!.appendingPathComponent("Image.png")
                  UserDefaults.standard.set(localImageFileUrl, forKey: "localImageFileUrl")
                  try data.write(to: localImageFileUrl!)
           }
    
       }
       catch {
                print("error")
       }
    

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 2011-07-14
      • 2011-01-11
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 2011-05-07
      相关资源
      最近更新 更多