Swift NSCache 结构未正确保存
Posted
技术标签:
【中文标题】Swift NSCache 结构未正确保存【英文标题】:Swift NSCache struct not saved properly 【发布时间】:2017-02-21 09:19:55 【问题描述】:我正在尝试缓存一个结构,这是我的代码:
class UserManager
static let sharedInstance : UserManager = UserManager()
fileprivate let cacheKey = "currentUser" as AnyObject
var currentUser: User?
didSet
self.cacheUser()
fileprivate func getUserFromCache() -> User?
let cache = NSCache<AnyObject, AnyObject>()
// here the user is always nil
if let user = cache.object(forKey: cacheKey) as? User
return user
else
return nil
fileprivate func cacheUser()
let cache = NSCache<AnyObject, AnyObject>()
if let user = currentUser
cache.setObject(user as AnyObject, forKey: cacheKey)
//Here : print user work fine and user is not nil
print(cache.object(forKey: cacheKey) as? User)
init()
currentUser = getUserFromCache()
问题在于,当函数getUserFromCache()
执行完cacheUser
函数后,总是返回nil。
我的代码有什么问题?
【问题讨论】:
【参考方案1】:每次调用 cacheUser 和 getUser 函数时,您都会创建一个新缓存,您希望拥有一个缓存而不是很多缓存。把它放在顶部的 sharedInstance 之后:
var cache = NSCache<AnyObject, AnyObject>()
并从 cacheUser 和 getUser 函数中删除 let cache = ...。
【讨论】:
这解决了我的部分问题,但是现在当我重新启动应用程序时,现金是空的,我想保存缓存,所以下次应用程序午餐时,他会从缓存中获取用户。 保存和加载是一个不同的问题,但是互联网上有很多教程和 Stack Overflow 上关于快速保存数据的答案。如果您有问题,请试一试并发布另一个问题。 NSUserDefaults 可能是您正在做的最简单的事情。如果您以后需要存储更多信息,您可能需要查看 NSCoding 或 CoreData,但它们更难使用。以上是关于Swift NSCache 结构未正确保存的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS Swift 中没有正确加载 Tableview 数组?