我有这个视图控制器
class ViewController: UIViewController {
override func viewWillAppear(animated: Bool) {
let user = NSUserDefaults()
let mobileNumber = user.valueForKey("mobileNumber") as? String
if let mobileNumber = mobileNumber {
print("mobile number = \(mobileNumber)")
}else {
print("no mobile number")
}
}
@IBAction func makePhoneCall(sender: UIButton) {
if let phoneCall = phoneCall {
let user = NSUserDefaults()
user.setValue(phoneCall, forKey: "mobileNumber")
当用户单击按钮时,我将
mobileNumber
保存在nsuserdefault中。然后我单击按钮,然后再次打开应用程序,但是问题是,当我打开应用程序agian时,即使我在
viewWillAppear
和if
部分中进行打印,我也不会打赌else
发出任何消息。 最佳答案
tylersimko是正确的,即当应用程序进入前台时未调用viewWillAppear(_:)
,而是由“应用程序进入背景”捕获了该事件。
就是说,您无需从应用程序委托观察到此情况,而可以使用UIApplicationWillEnterForegroundNotification
notification:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "applicationDidEnterForeground", name: UIApplicationWillEnterForegroundNotification, object: nil)
}
func applicationDidEnterForeground() {
// Update variable here.
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
上面的代码:
applicationDidEnterForeground()
函数。 applicationDidEnterForeground()
完成所有需要做的事情。 鉴于您正在使用NSUserDefaults,可以改为考虑观察
NSUserDefaultsDidChangeNotification
。