首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCache()不能正常工作

NSCache()不能正常工作
EN

Stack Overflow用户
提问于 2016-06-01 00:36:51
回答 1查看 395关注 0票数 0

我想我已经厌倦了NSCache()。我不明白这背后的问题是什么。尝试将[AnyObject]数组保存为NSCahce(),我使用下面这行代码完成了这项工作。

代码语言:javascript
复制
NSCache().setObject(data, forKey: "News")

并试图用这种方式找回它。

代码语言:javascript
复制
     if let news = NSCache()("News") as? [AnyObject]
     {
     }
     else 
     {
       // I am always here :)
     }

所以我在想这有什么问题。在谷歌上搜索一下后,我可以看到设置totalCostLimitcountLimit将帮助你解决这个问题。所以我把它设置成这样。

代码语言:javascript
复制
NSCache().totalCostLimit = 50000
NSCache().countLimit = 50000

在设置这个之后,它也不工作了。所以我想在主线程中运行这段代码,我就是这样做的。

代码语言:javascript
复制
        dispatch_async(dispatch_get_main_queue()) {
          NSCache().setObject(data, forKey: "News")
        }

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

这是怎么回事?我知道NSCache()可以存储AnyObject值。我在同一项目中保存了许多图像,没有任何问题,当我尝试保存时,它返回nil

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

我是如何全局创建实例并访问这些实例的。在AppDelegate.swift文件中创建了一个NSCache实例,但在AppDelegate类之外

代码语言:javascript
复制
 let mainCache = NSCache()

    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate {

      func applicationDidFinishLaunching(aNotification: NSNotification)
      {
        mainCache.totalCostLimit = 50000
        mainCache.countLimit = 50000
      }
    }

后来我像这样使用它。

代码语言:javascript
复制
mainCache.setObject(data, forKey: "News")

然后像这样把数据取回来。

代码语言:javascript
复制
 if let news = mainCache.objectForKey("News") as? [AnyObject]
 {

 }
else
 {
         // Always here :)           
 }
EN

回答 1

Stack Overflow用户

发布于 2016-06-01 00:39:12

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37551211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档