2017-02-04 9 views
0

Я пытаюсь сохранить и получить пользовательский класс для UserDefaults в моем приложении macOS. Я получаю ноль для NewDataПользовательский класс Unarchive nil в Cocoa Swift

class countClass: NSObject, NSCoding { 
    var leftClickCount : Int = 0 

    init(leftClickCount: Int) { 
     self.leftClickCount = leftClickCount 
     super.init() 
    } 

    func encode(with coder: NSCoder) { 
     coder.encode(self.leftClickCount, forKey: "leftClickCount") 
    } 

    required convenience init?(coder decoder: NSCoder) { 
     guard let leftClickCount = decoder.decodeObject(forKey: "leftClickCount") as? Int 
      else { 
      return nil 
     } 
     self.init(
      leftClickCount: leftClickCount 
     ) 
    } 
} 

class ViewController: NSViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let leftC = countClass(leftClickCount: 25) 
     let ud = UserDefaults.standard 
     let archivedData = NSKeyedArchiver.archivedData(withRootObject: leftC) 
     ud.set(archivedData, forKey: "data") 
     ud.synchronize() 
     let tempData = ud.object(forKey: "data") as! Data 
     let newData = NSKeyedUnarchiver.unarchiveObject(with: tempData) as! countClass // Getting nil here 
    } 
} 
+0

Является 'TempData 'nil? – Pierce

+0

Нет tempData не ноль – Kashif

ответ

0

Я был в состоянии решить эту проблему путем перехода от:

decoder.decodeObject(forKey: "leftClickCount") as? Int

с:

decoder.decodeInteger(forKey: "leftClickCount")

 Смежные вопросы

  • Нет связанных вопросов^_^