2015-11-11 4 views
2

у меня есть этот вид контроллерviewWillAppear не вызывается после нажатия кнопки домой

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 часть.

+0

Почему вы ожидаете, что 'viewWillAppear:' будет вызван при возврате в приложение? – rmaddy

+0

@rmaddy, что я изучаю, кажется, что я неправ, должен ли я использовать делегат приложения? – sarah

ответ

1

В AppDelegate.swift, сделать ваши изменения в applicationWillEnterForeground:

func applicationWillEnterForeground(application: UIApplication) { 
    // do something 
} 

В качестве альтернативы, если вы хотите сохранить ваши изменения в ViewController, вы можете настроить функцию и называть его так:

func applicationWillEnterForeground(application: UIApplication) { 
    ViewController.refreshView() 
} 
+0

, но как я могу узнать, что на экране будет отображаться определенный монитор? потому что этот делегат приложения предназначен для всех контроллеров просмотров. – sarah

+0

Вы можете написать метод в ViewController, который хотите обновить, а затем вызвать его в 'applicationWillEnterForeground' в AppDelegate. – tylersimko

1

tylersimko верно, что viewWillAppear(_:) не вызывается, когда приложение входит на передний план, и это событие вместо этого захватывается «приложение будет вводить фон».

Тем не менее, вы не должны наблюдать это из приложения делегата, но вместо того, чтобы можно было использовать UIApplicationWillEnterForegroundNotificationnotification:

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) 
} 

Приведенный выше код:

  1. Когда ваш вид загрузится, просмотрите регистры контроллера, чтобы функция applicationDidEnterForeground() вызывалась всякий раз, когда приложение входит на передний план.
  2. Функция applicationDidEnterForeground() делает все, что нужно сделать.
  3. Контроллер представления отключает от всех уведомлений, когда он освобождается, чтобы избежать ссылки на зомби в версиях iOS до 9.0.

Учитывая, что вы работаете с NSUserDefaults, вместо этого вы можете рассмотреть возможность наблюдения NSUserDefaultsDidChangeNotification.

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