Есть начальная сцена, где viewDidLoad
получает объект из данных, и выводит его свойство в UITextLabel
данных в NSUserDefaults обновляется только после применения повторного запуска
super.viewDidLoad()
var defaults = NSUserDefaults.standardUserDefaults()
var data: NSData = defaults.objectForKey("testing1") as! NSData
var payment: CPaymentInfo = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! CPaymentInfo
testLabel.text = "\(payment.paymentValue)"
По крайней мере, у меня есть еще одна сцена, которая содержит два UITextFields
и UIButtons
. Я хочу изменить данные в NSUserDefaults
и увидеть новые данные о начальной сцене после того, как Segue
if sender as? UIBarButtonItem == saveButton {
var defaults = NSUserDefaults.standardUserDefaults()
if discriptionField.hasText() {
newPaymentItem = CPaymentInfo(value: valueField.text.toInt()!, discription: discriptionField.text)
} else {
newPaymentItem = CPaymentInfo(value: valueField.text.toInt()!)
}
var data: NSData = NSKeyedArchiver.archivedDataWithRootObject(newPaymentItem!)
defaults.setObject(data, forKey: "testing1")
}
, но когда я нажимаю кнопку сохранить, новый номер в начальной сцене does't появляется, только старый номер, но если я повторно -run, появится новый номер.
Как я понял, viewDidLoad
, возможно, не запускается после segue. Ofc я могу установить текстовую метку, как это в размотки метод начальной сцены
var sourse: AddPaymentViewController = segue.sourceViewController as! AddPaymentViewController
var newItem: CPaymentInfo? = sourse.newPaymentItem
if let new = newItem {
self.testLabel.text = "\(new.paymentValue)"
var defaults = NSUserDefaults.standardUserDefaults()
var data: NSData = NSKeyedArchiver.archivedDataWithRootObject(new)
defaults.setObject(data, forKey: "testing1")
}
Но есть более элегантный и рациональный способ установить «testLabel.text»?
Вы делаете 'defaults.synchronize()'? – sbarow
Вы должны использовать синхронизацию в будущем. –