2017-01-08 7 views
0

У меня есть класс под названием Stop. Этот класс реализует NSCoding. Я могу сохранить экземпляры Stop в UserDefaults без проблем. Все идет нормально. Моя проблема заключается в сохранении Array остановок. Это то, что я пытаюсь:Swift: не удается сохранить массив для UserDefaults

private func save(stopArray array: [Stop],withKey key: String) { 
     let data = NSKeyedArchiver.archivedData(withRootObject: array) 
     self.userDefaults.set(data, forKey: key) 
     self.userDefaults.synchronize() 
    } 

private func loadStopArray(key: String) -> [Stop]? { 
     guard let data = self.userDefaults.object(forKey: key) as? Data else { 
      return nil 
     } 
     return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop] 
} 

Теперь, каждый раз, когда я называю loadStopArray я получаю пустой массив. Не нуль, просто пустой массив.

Любые идеи? Благодаря!

+1

Чтобы судить о том, что происходит, я думаю, нам нужно будет увидеть вашу реализацию Stop. – matt

+0

Вы уверены, что используете тот же самый точный ключ при сохранении и извлечении? –

+0

@matt вы были правы, мой конструктор NSCoder возвращал нуль ... Спасибо! – Yotam

ответ

1

Вы ошибаетесь loading Object и Data. self.userDefaults.object() до self.userDefaults.data() с данными.

private func loadStopArray(key: String) -> [Stop]? { 
     if let data = self.userDefaults.data(forKey: key) { 
      return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop] 
     } else { 
      return nil 
     } 
}