Ios NSUserDefaults中的数据仅在重新运行应用程序后刷新
有一个初始场景,viewDidLoad从数据中获取对象并将其属性输出到UITextLabel 至少我还有一个场景包含两个UIExtFields和UIButton。我想更改NSUserDefaults中的数据,并在segue之后在初始场景中查看新数据Ios NSUserDefaults中的数据仅在重新运行应用程序后刷新,ios,iphone,swift,Ios,Iphone,Swift,有一个初始场景,viewDidLoad从数据中获取对象并将其属性输出到UITextLabel 至少我还有一个场景包含两个UIExtFields和UIButton。我想更改NSUserDefaults中的数据,并在segue之后在初始场景中查看新数据 if sender as? UIBarButtonItem == saveButton { var defaults = NSUserDefaults.standardUserDefaults() if dis
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")
}
但当我按下“保存”按钮时,初始场景中的新号码不会出现,只会出现旧号码,但若我重新运行应用程序,新号码会出现
据我所知,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?是的,在展开段之后不会调用viewDidLoad。
可以在ViewWillAppeard方法或“展开”序列中刷新UI。问题在于您没有同步保存的数据。必须调用default.synchronize方法才能将更改写入存储
我尝试使用ViewWillDisplay,但新号码仅在大约0.5秒后才会随着旧号码的更改而显示。您是否正在执行默认值。同步?您以后必须使用同步。
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")
}