Вылеты при клике в поле поиска

keyboard
swift
xcode
ios

#1

Краткая предыстория (чтобы не били меня палками): наш штатный программер ушел в мир иной, не успев исправить несколько ошибок во вспомогательном рабочем приложении. Я совсем вообще не программист, но поскольку доступ к Xcode у меня есть, я попытался как-то вникнуть. Что-то смог изменить, но вот эти ошибки так и не смог ни нагуглить, ни понять.

  1. в разделе приложения есть поисковая строка и модальное окно для отправки сообщений другим пользователям (через DJSemiModalViewController). Так вот, как я понял, для того, чтобы при открытии модального окна оно поднималось над клавиатурой, а не пряталось под ней, есть кусок кода

     func setKeyboard() {
         NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
     }
    
     @objc func keyboardWillShow(notification: NSNotification) {
         if let keyboardFrame = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
             if self.controller.view.frame.origin.y == 0 {
                 let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as! Double
                 UIView.animate(withDuration: duration) {
                     self.controller.view.frame.origin.y -= keyboardFrame.height - self.view.safeAreaInsets.bottom
                     
                 }
             }
         }
     }
    

Этот кусок корректно срабатывает, если вверху всего кода имеется незакомментированное setKeyboard() в куске

override func viewDidLoad() {
    super.viewDidLoad()
    
    tableView.tableFooterView = UIView()
    prepareSearchBar()
    prepareFRC()
    setKeyboard()
}

При этом, если нажать в строку поиска, приложение вылетает.
А если закомментировать setKeyboard(), то приложение не вылетает, но клавиатура закрывает собой модальное окно внизу.

Ошибка при вылете следующая:

if self.controller.view.frame.origin.y == 0 { Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

Помогите справиться с ошибкой. Спасибо.


#2

покажите куски кода где идет инициализация или присвоение self.controller
либо же, узнайте, почему там пусто.


#3

Спасибо за внимание к вопросу. Но я не программист и не понимаю совершенно, что такое инициализация, присвоение и почему и где пусто.


#4

То есть вам жалко оплатить несколько часов нормального разработчика и вы решили тут на форуме все ваши проблемы за бесплатно решить?


#5

Пока получается, что я их сам решаю. Осталась последняя. Денег мне не жаль. Но при этом я четко понимаю, что тут полная ерунда, и простой толковый совет (а не офтопы и ругня) помогут ее решить.


#6

Пока получается, что ваш штатный программер свалил, так как вы ему не заплатили. Потому что дешевле и быстрее нанять фрилансера, который за час или два решит ваши проблемы, чем два дня сидеть на форуме и копипастить текст что ваш штатный программер отошел в мир иной.


#7

Вы хотите увидеть св-во о смерти? Или может быть нишу в колумбарии?


#8

Зачем здесь это вообще писать? Думаете нам станет вас жалко и мы кинемся бесплатно доделывать ваш проект?


#9

Проект не мой. Доделывать ничего не нужно. Жалость мне вообще не нужна тем более.
А Вас лично я попрошу больше не писать. Оратите внимание на другие темы, где у Вас будет возможность легкой наживы.
Большое спасибо.


#10

Это вы подумали что я себя пытаюсь продать? Ахахах. Нет, я таким не занимаюсь. Если считаете что я не прав как-то, попробуйте написать свою историю на тостере.


#11

Ну вот снова все решил сам. Я не знаю, откуда у меня это все берется… Внутренний голос что ли подсказывает. Я просто подумал - а что если… Взял вырезал кусок кода, указанный мною выше, и вставил его в другой файл, отвечающий за модельное окно. И все сработало. Как часы.