NSCache()无法正常工作

时间:2016-05-31 16:36:51

标签: macos

我觉得我厌倦了NSCache()。无法理解这背后的问题是什么。尝试将[AnyObject]数组保存到NSCahce(),我已使用以下代码行完成了这项工作。

NSCache().setObject(data, forKey: "News")

试图用这种方式取回它。

     if let news = NSCache()("News") as? [AnyObject]
     {
     }
     else 
     {
       // I am always here :)
     }

所以我在想这是什么问题。在Google中搜索了一下后,我发现设置totalCostLimitcountLimit可以帮助您解决此问题。所以我把它设置成这样。

NSCache().totalCostLimit = 50000
NSCache().countLimit = 50000

设置之后,它也无法正常工作。所以我想在主线程中运行这段代码,我这样做了。

        dispatch_async(dispatch_get_main_queue()) {
          NSCache().setObject(data, forKey: "News")
        }

仍然返回nil。现在最后但并非最不重要的是,我创建了一个NSCache()的全局实例,并使用该实例调用所有这些操作。好吧,这样做也没有给出预期的结果。它总是给我nil

这里发生了什么?我知道NSCache()可以存储AnyObject个值。我在同一个项目中保存了很多图像没有任何问题,当我试图保存它时它返回nil

这个AnyObject包含一些自定义类。这可能是个问题吗?如果是,我将如何在不使用CoreDataNSUserdefaults的情况下在本地保存。

我如何全局创建实例并访问这些实例。在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 :)           
 }

1 个答案:

答案 0 :(得分:1)

当您编写NSCache()时,您正在创建新的NSCache实例。你几乎在每一行都这样做。

您需要做的是创建一个实例let myCache = NSCache(),然后重复使用它:myCache.setObject(data, forKey: "News")