0

The line countrySearch.delegate = self is giving me a fatal error.

"Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"

My Code:

var searchedCountry = [String]()
var searching = false
@IBOutlet weak var countrySearch: UISearchBar!
@IBOutlet weak var tblView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    **countrySearch.delegate = self**
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searching {
        return searchedCountry.count
    } else {
        return countryNameArr.count
    }
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    if searching {
        cell?.textLabel?.text = searchedCountry[indexPath.row]
    } else {
        cell?.textLabel?.text = countryNameArr[indexPath.row]
    }
    return cell!
  }

}

extension ViewController: UISearchBarDelegate {

  func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    searchedCountry = countryNameArr.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
    searching = true
    tblView.reloadData()
  }

  func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    searching = false
    searchBar.text = ""
    tblView.reloadData()
  }

}
Mahendra
  • 8,448
  • 3
  • 33
  • 56

1 Answers1

0

Your countrySearch outlet isn't connected with your storyboard. As not being connected, the controller loads countrySearch as a nil instance and trying to set delegate to the nil instance, app crashes.

Ankur Lahiry
  • 2,253
  • 1
  • 15
  • 25