2017-02-21 22 views
1

Я пытаюсь кэшировать STRUCT, это мой код:Swift NSCache не STRUCT сохранены правильно

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() всегда NIL даже после выполнения cacheUser функции.

Что не так в моем коде?

ответ

2

Вы создаете новый кеш при каждом вызове функций cacheUser и getUser, вы хотите, чтобы один кеш их не много. Поместите это после sharedInstance в верхней части:

var cache = NSCache<AnyObject, AnyObject>() 

и удалить кэш ЛПЭ = ... от функций cacheUser и GetUser.

+0

Это решает часть моей проблемы, но теперь, когда я перезапускаю приложение, наличные деньги пустые, я хочу сохранить кеш в следующий раз, когда приложение запустится, он получит пользователя из кеша. – Chlebta

+0

Сохранение и загрузка - это другой вопрос, но есть много обучающих программ в Интернете и ответы на Stack Overflow о сохранении данных в swift. Пожалуйста, пойдите на него и отправьте еще один вопрос, если у вас есть проблемы. – simonWasHere

+0

Да, но какой самый простой способ сделать это? – Chlebta