我想我已经厌倦了NSCache()。我不明白这背后的问题是什么。尝试将[AnyObject]数组保存为NSCahce(),我使用下面这行代码完成了这项工作。
NSCache().setObject(data, forKey: "News")并试图用这种方式找回它。
if let news = NSCache()("News") as? [AnyObject]
{
}
else
{
// I am always here :)
}所以我在想这有什么问题。在谷歌上搜索一下后,我可以看到设置totalCostLimit和countLimit将帮助你解决这个问题。所以我把它设置成这样。
NSCache().totalCostLimit = 50000
NSCache().countLimit = 50000在设置这个之后,它也不工作了。所以我想在主线程中运行这段代码,我就是这样做的。
dispatch_async(dispatch_get_main_queue()) {
NSCache().setObject(data, forKey: "News")
}它仍然返回nil。最后,我创建了NSCache()的一个全局实例,并使用该实例调用所有这些操作。嗯,这样做也没有给出预期的结果。它总是带给我nil。
这是怎么回事?我知道NSCache()可以存储AnyObject值。我在同一项目中保存了许多图像,没有任何问题,当我尝试保存时,它返回nil。
这个AnyObject包含一些自定义类。这会是一个问题吗?如果是,如何在不使用CoreData或NSUserdefaults的情况下将其保存在本地。
我是如何全局创建实例并访问这些实例的。在AppDelegate.swift文件中创建了一个NSCache实例,但在AppDelegate类之外
let mainCache = NSCache()
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification)
{
mainCache.totalCostLimit = 50000
mainCache.countLimit = 50000
}
}后来我像这样使用它。
mainCache.setObject(data, forKey: "News")然后像这样把数据取回来。
if let news = mainCache.objectForKey("News") as? [AnyObject]
{
}
else
{
// Always here :)
}发布于 2016-06-01 00:39:12
当您编写NSCache()时,您正在创建一个新的NSCache实例。您几乎在每一行上都在这样做。
您需要做的是创建一个实例let myCache = NSCache(),然后重用它:myCache.setObject(data, forKey: "News")。
https://stackoverflow.com/questions/37551211
复制相似问题