我觉得我厌倦了NSCache()
。无法理解这背后的问题是什么。尝试将[AnyObject]
数组保存到NSCahce()
,我已使用以下代码行完成了这项工作。
NSCache().setObject(data, forKey: "News")
试图用这种方式取回它。
if let news = NSCache()("News") as? [AnyObject]
{
}
else
{
// I am always here :)
}
所以我在想这是什么问题。在Google中搜索了一下后,我发现设置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 :)
}
答案 0 :(得分:1)
当您编写NSCache()
时,您正在创建新的NSCache实例。你几乎在每一行都这样做。
您需要做的是创建一个实例let myCache = NSCache()
,然后重复使用它:myCache.setObject(data, forKey: "News")
。