Ios Swift mapview无法显示缩略图图像
我正在将图像写入一个文件并在mapview didSelect方法中读取,它给出了图像数据读取错误Ios Swift mapview无法显示缩略图图像,ios,swift,mapkit,mkmapview,Ios,Swift,Mapkit,Mkmapview,我正在将图像写入一个文件并在mapview didSelect方法中读取,它给出了图像数据读取错误 var localImageFileUrl: URL? = nil do { delegate.documentDirectoryUrl = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, crea
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})
很好
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)")
}
我通过如下结构传递数据:
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)")
}
}
}
}
调试窗口显示错误:
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)")
}
}
}
}
图像URL:
可选的(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]NSURL连接
已完成,错误代码为1002
2020-03-27 00:07:07.009134-0500 r2nr[9945:4518751]
cfurlCopyResourcePropertyWorkey失败,因为它被传递了一个URL
没有计划
无法加载图像数据:错误域=NSCOCAERRORDOMAIN代码=256
无法打开文件“Image.png”
UserInfo={NSURL=可选(file:///var/mobile/Containers/Data/Application/19A5A226-3CAF-4DC0-9015-40278703C5BA/Documents/Image.png)}
文件路径未更改,但无法从文件中读取图像数据。怎么了?我花了几个小时,找到了解决办法。 我正在访问图像数据作为数据
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")
}