Swift 阻止在返回或终止应用程序后再次下载图像
首先我想说的是,我在这个网站上没有找到任何关于它的信息 我想将Swift 阻止在返回或终止应用程序后再次下载图像,swift,firebase,firebase-storage,Swift,Firebase,Firebase Storage,首先我想说的是,我在这个网站上没有找到任何关于它的信息 我想将NSURL保存到NSUserDefaults中,以防止在每个打开的应用程序或视图上加载图像。我试图做到这一点,但由于某种原因,我做不到。至少我认为应该这样做: let productImageref = productsValue[indexPath.row]["Products"] as? String cell.snusProductImageView.image = nil if let ur
NSURL
保存到NSUserDefaults
中,以防止在每个打开的应用程序或视图上加载图像。我试图做到这一点,但由于某种原因,我做不到。至少我认为应该这样做:
let productImageref = productsValue[indexPath.row]["Products"] as? String
cell.snusProductImageView.image = nil
if let url = self.productsValue[indexPath.row]["imageUrl"] as? NSURL {
cell.snusProductImageView.kf_showIndicatorWhenLoading = true
var storedUrl = defaults.objectForKey("imageUrl") as? NSURL
cell.snusProductImageView.kf_setImageWithURL(storedUrl)
}
else {
FIRStorage.storage().reference().child("\(productImageref!).png").downloadURLWithCompletion({(url, error)in
if error != nil{
print(error)
return
}else{
self.productsValue[indexPath.row]["imageUrl"] = url
self.defaults.setURL(url, forKey: "imageUrl")
self.productstable.reloadData()
dispatch_async(dispatch_get_main_queue(), {
})
}
})
}
如果我错了,请纠正我。将url-s保存到userdefaults
中是否应该起作用
我到底做错了什么?也许将它保存到CoreData
中会更好,但我认为这太过分了
为什么翠鸟或SDWebImages库没有缓存它?您必须存储URL,如下所示:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setURL(yourURL:NSURL?, forKey: "imageURL")
然后像这样读NSUserDefaults
:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.URLForKey("imageURL")
希望这能有所帮助。有两件事可能会有所帮助:在将某些内容保存为默认值后使用
同步
,然后使用URLForKey
将其取回
(并检查您正在保存的内容是否确实是NSURL
)
下面是在项目中工作的示例代码;将其与您的进行比较(NSUserDefaults在游乐场中被打破):
据我所知,您希望在NSUserDefault中保存多个图像url
let url = NSURL(string: "http://localhost/")
var array = [NSString]()
array.append((url?.absoluteString)!)
NSUserDefaults.standardUserDefaults().setValue(array, forKey: "image")
NSUserDefaults.standardUserDefaults().synchronize()
if let fetchedURL = NSUserDefaults.standardUserDefaults().valueForKey("image") as! [String]? {
print("\(fetchedURL[0]) returned")
let fileUrl = NSURL(string: fetchedURL[0])
print(fileUrl)
} else {
print("No URL in defaults")
}
打印结果
返回
可选()我强烈建议将其与SDWebImage或PINRemoteImage等工具结合使用。对于这个应用程序,有比CoreData和NSUserDefaults更好的解决方案:)噢。。最后,还有一些不是否决票。那么根据你说的,我知道下载url永远不会改变?所以我不必将它们存储到数组和userdefaults中?不,这两种URL类型(
gs://
和https://
)都是稳定的。您需要使用publichttps://
一个用于第三方映像加载库或缓存。实时数据库还具有脱机持久性,因此您不必在冷启动时获取URL:)Github one具有缓存控制:max age=300
,而Firebase Storage在默认情况下没有设置缓存控制(您可以在上载文件时设置,或通过更新元数据来更改),所以我想这就是翠鸟不缓存它的原因。谢谢你提供的信息:)
let url = NSURL(string: "http://localhost/")
var array = [NSString]()
array.append((url?.absoluteString)!)
NSUserDefaults.standardUserDefaults().setValue(array, forKey: "image")
NSUserDefaults.standardUserDefaults().synchronize()
if let fetchedURL = NSUserDefaults.standardUserDefaults().valueForKey("image") as! [String]? {
print("\(fetchedURL[0]) returned")
let fileUrl = NSURL(string: fetchedURL[0])
print(fileUrl)
} else {
print("No URL in defaults")
}