2015-07-15 2 views
0

Есть начальная сцена, где 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»?

+1

Вы делаете 'defaults.synchronize()'? – sbarow

+0

Вы должны использовать синхронизацию в будущем. –

ответ

0

Да, viewDidLoad не будет называться после размотки segue. Это нормально, чтобы обновить интерфейс в viewWillAppear или в режиме размотки.

+0

Я попытался использовать viewWillAppear(), но новый номер появляется с изменением старого только через некоторое время (около 0,5 секунды). –

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