我有这个视图控制器
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中。
然后我点击按钮,然后我再次打开应用程序,但问题是,当我打开应用程序时,我不打赌来自viewWillAppear
的任何消息,即使我正在打印if
以及else
部分。
答案 0 :(得分:3)
tylersimko是正确的,当应用程序进入前台时不会调用viewWillAppear(_:)
而该事件被&#34捕获;应用程序将进入后台"。
也就是说,您不需要从应用代表处观察此内容,而是可以使用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
。
答案 1 :(得分:2)
在AppDelegate.swift中,在applicationWillEnterForeground
中进行更改:
func applicationWillEnterForeground(application: UIApplication) {
// do something
}
或者,如果您想在ViewController中保留更改,可以设置一个函数并调用它:
func applicationWillEnterForeground(application: UIApplication) {
ViewController.refreshView()
}