Swift 将值设置为缓存的图像以崩溃结束

Swift 将值设置为缓存的图像以崩溃结束,swift,xcode11,setvalue,nscache,nsunknownkeyexception,Swift,Xcode11,Setvalue,Nscache,Nsunknownkeyexception,我正在下载图像并将其添加到缓存中。这很好,但当我想在缓存中为下载的图像添加值时,我的代码返回错误“由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[setValue:forUndefinedKey:]:该类不符合密钥XXX的键值编码” let cache=NSCache() func downloadImage(带url:url,完成:@escaping(u-image:UIImage?)->()){ 让dataTask=URLSession.shared.d

我正在下载图像并将其添加到缓存中。这很好,但当我想在缓存中为下载的图像添加值时,我的代码返回错误“由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[setValue:forUndefinedKey:]:该类不符合密钥XXX的键值编码”

let cache=NSCache()
func downloadImage(带url:url,完成:@escaping(u-image:UIImage?)->()){
让dataTask=URLSession.shared.dataTask(with:url){data,responseURL,错误在
var下载图像:UIImage?
如果let data=data{
DownloadeImage=UIImage(数据:数据)
打印(“下载图像”)
}
DispatchQueue.main.async{
完成(下载图像)
}
如果下载图像!=无{
让date=date()//调用日期
var calendar=calendar.current//调用日历
如果让时区=时区(标识符:“GMT-4”){
calendar.timeZone=时区
}
let day=calendar.component(.day,from:date)
self.cache.setObject(downloadeImage!,forKey:url.absoluteString作为NSString)
self.cache.setValue(day,forKey:url.absoluteString)//此行出错
}
}
dataTask.resume()
}

发生错误的原因是
Int
不是
NSObject的子类

但还有两个严重的问题

  • 缓存被声明为
    ,因此该值必须是
    UIImage
    ,但是
    day
    Int
  • 无论如何,用整数覆盖图像是没有意义的

  • 您可以将
    day
    值附加到URL字符串中

    let day = calendar.component(.day, from: date)
    let key = "\(url.absoluteString)-\(day)"            
    self.cache.setObject(downloadedImage!, forKey: key as NSString)
    

    哦,好吧,那我误解了函数。有没有一种方法可以为缓存的图像指定一个类似整数的值?我试图比较图片下载的日期。已经谢谢你了
    NSCache
    的工作原理类似于字典。它保存相同键类型和值类型的键值对。一个可能的解决方案是将日期信息作为我之前想到的URL字符串的前缀或后缀。那我就试试。非常感谢。
    let day = calendar.component(.day, from: date)
    let key = "\(url.absoluteString)-\(day)"            
    self.cache.setObject(downloadedImage!, forKey: key as NSString)