2016-11-01 5 views
0

У меня возникла странная проблема. У меня есть диспетчер просмотра регистрации. Оттуда я перехожу к второму диспетчеру просмотра после завершения регистрации, где есть простое текстовое поле. Теперь, когда я нажимаю на текстовое поле, после выполнения textFieldDidBeginEditing дает фатальную ошибку.фатальная ошибка: неожиданно найден nil при разворачивании необязательного значения при редактировании текстового поля в swift

fatal error: unexpectedly found nil while unwrapping an Optional value 

Следующая вещь, которую я застрял в точке останова

0xc7b108 <+68>: bl  0xcd0198     ; function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of Swift.(_fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) ->()).(closure #2) 
0xc7b10c <+72>: trap 

Вещи, которые я проверил до сих пор.

  1. @IBOutlet подключен.
  2. textfield.delgate настроен на себя.
  3. TextField не ноль (Записан переменная texfield в разделе textFieldDidBeginEditing)

Сейчас наибольший интерес то, когда я снова запустить приложение и перейдите к одной и той же ViewController (Второй ViewController), я могу редактировать текстовое поле. Нет ловушки или аварии. Эта вещь происходит только тогда, когда я нажимаю secondviewcontroller сразу после завершения регистрации.

После регистрации я использую этот код, чтобы перейти вторую ViewController

let instanceViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController 
self.navigationController?.pushViewController(instanceViewController, animated: true) 

Также я использую следующий код которого Войти учетные данные сохраняются в AppDelegate didFinishLaunchingWithOptions навигацию второй ViewController

NB : Этот код будет выполняться только в том случае, если пользователь завершает работу приложения после успешной регистрации и снова пытается запустить приложение.

let userDefaults = NSUserDefaults.standardUserDefaults() 
if let isUserLogin:Bool = userDefaults.boolForKey(ConstantsKey.UserDefault.isLogin){ 
    let objMainViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController 
    let navController = UINavigationController.init(rootViewController: objMainViewController) 

    self.window?.makeKeyAndVisible()    
    self.window?.rootViewController = navController 
} 

Может ли кто-нибудь помочь мне?

+0

Что находится внутри вашего 'textFieldDidBeginEditing'? – chengsam

+0

@chengsam: Ничего. – Poles

ответ

0
let instanceViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as? SecondViewController 
0

Извините за беспокойство. Кажется, я понял это.

Это происходит из-за клавиатуры keyboardWillShow уведомление. Теперь функция уведомлений keyboardWillShow реализована в диспетчере регистрации view, и я также работал с другой текстовой переменной одного и того же диспетчера представлений. Поэтому, когда клавиатураWillShow выполняет для secondviewcontroller, она обнаружила текстовое поле страницы регистрации как ноль, которое дает мне фатальную ошибку.

Решение: Мне просто нужно было удалить наблюдателя из диспетчера просмотра viewController регистрации в deinit функция.

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

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