2015-10-14 2 views
1

Я пытаюсь получить информацию о UITextField, а затем повторно использовать эти данные из UITextField с быстрым 2.0 и Xcode 7. Но каждый раз, когда я запускаю приложение, приложение выходит из строя и говорит:UITextField всегда приводит к нулю

fatal error: unexpectedly found nil while unwrapping an Optional value

, хотя в текстовом поле есть что-то. Кто-то знает, как решить эту проблему?

Это как мой код выглядит:

@IBOutlet weak var entryAmount: UITextField! //TextField declaration 
@IBAction func saveNewButtonTapped(sender: UIBarButtonItem) { 
     //update overall amount 
     let amount: String? = self.entryAmount.text! //Throws the error at this point 
     self.viewController.currentValue += amount 
} 

В другой функции, я написал то же самое («пусть количество: String = entryAmount.text!»), И когда я напечатал «количество», он показал правильный результат. Но как только я попытался использовать его дальше, «сумма» всегда была нулевой, даже жесткой она всегда печатала правильный результат в начале.

Я сталкиваюсь с тем же, что и с DatePicker, переключает и обновляет тексты кнопок.

Кто-то знает что-то, что может мне помочь? - Спасибо

Btw Я довольно новый для быстрого и Xcode.

Обновление: Не может быть, потому что TextField находится в ContainerView?

Обновление 2: Я почти уверен, что проблема связана с ContainerView. Я попробовал TextField, который не находится в контейнере и не получил ошибку, он работал отлично.

+0

Попробуйте отладить команду 'po'. Когда он выбрасывает, введите 'po self.entryAmount', чтобы проверить, нет ли он. Или 'po self.entryAmout.text', чтобы проверить, является ли' text' нулем. – t4nhpt

+0

Я пробовал это, и оба они ноль. '(Lldb) ро self.entryAmount неисправимая ошибка: неожиданно обнаружил ноль в то время разворачивания необязательного значения фатальной ошибки: неожиданно обнаружил ноль в то время разворачивания необязательного значения ноля (lldb) ро self.entryAmount.text неисправимой ошибка: неожиданно найдено nil при развертывании необязательного значения Ошибка: Выполнение было прервано, причина: EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, subcode = 0x0). Процесс был возвращен в состояние перед оценкой выражения. ' –

ответ

0

Пожалуйста, проверьте в своем интерфейсе, что UITextField правильно связан с IBOutlet "entryAmount". Возможно, они не связаны должным образом, поэтому значение равно нулю во время выполнения.

+0

Уже проверено, что оно должно быть правильно подключено. –

0

Sample Code

Я мог бы быть неправильно, но то, что кажется, из вашего вопроса у вас возникли проблемы с обзорным. Любые переменные, которые вы объявляете в функции, привязаны только к этой функции.

Объявление суммы в saveNewButtonTapped означает, что количество установлено только в этой функции. Использование суммы в другой функции приведет к тому, что сумма будет равна нулю. Если вы хотите использовать переменные между функциями, вам нужно объявить их вне функции.

В примере у меня есть var runningAmount. В примере, если я нажму кнопку, которая вызывает pressAnotherButton, я получаю ту же фатальную ошибку, которую вы получаете, потому что я разворачиваю self.runningAmount, прежде чем он будет установлен. Но если я нажму кнопку, которая вызывает saveNewButtonTapped, даже без ничего в текстовом поле, затем нажмите кнопку, которая вызывает pressAnotherButton, я получаю вывод на фотографии.

+0

Текстовое поле объявляется в начале класса и в конце класса объявляется функция, если это то, что вы имеете в виду. –

+0

Значит, больше похоже на код в подклассе ViewController? Что вы подразумеваете под контейнером? Это подпрограмма uiview? – beyowulf

+0

Да, он находится в подклассе UIViewController. Я просто попробовал то, что вы сказали, но я все еще получаю ошибку, и она по-прежнему равна нулю. С контейнером я подразумеваю, что TextField находится в контейнере, и я думаю, что это проблема. Поскольку я попробовал другой TextField, который не находится в контейнере, и он работал отлично. - Спасибо за помощь! –

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