0

Я пытаюсь настроить searchBar с помощью TableView, чтобы я мог фильтровать через представление таблицы, я пытаюсь сделать это программно. Хотя мой код продолжает отправлять обратно ошибку: unexpectedly found nil while unwrapping an Optional value. Ошибка находится внутри func numberOfRowsInSection, я ее отметил. это связано с SearchDisplayController, он говорит, что это ноль, я думаю? Код:Поиск Дисплей Контроллер, вызывающий сбой

struct UserMatches { 
    var finalMatchesName : String 
    var finalMatchesAge : Int 
    var finalMatchesLocation : PFGeoPoint 
    var finalMatchesImage : NSData 
} 

class Matches: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate { 

    var tableView = UITableView() 
    var searchBar = UISearchBar() 

    var userMatches = [UserMatches]() 
    var filterUsers = [UserMatches]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     createTableView() 
    } 

    func filterContentForSearchText(searchText: String) { 
     self.filterUsers = self.userMatches.filter({(user1: UserMatches) -> Bool in 
      let stringMatch = user1.finalMatchesName.rangeOfString(searchText) 
      return (stringMatch != nil) 
     }) 
    } 

    func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -> Bool { 
     self.filterContentForSearchText(searchString) 
     return true 
    } 

    func createTableView() { 
     tableView.sizeToFit() 
     tableView.dataSource = self 
     tableView.delegate = self 
     tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 

     searchBar.sizeToFit() 
     searchBar.delegate = self 
     searchBar.showsScopeBar = true 
     searchBar.searchBarStyle = UISearchBarStyle.Minimal 
     searchBar.showsCancelButton = true 
     searchBar.returnKeyType = UIReturnKeyType.Search 
     tableView.tableHeaderView = searchBar 

     var searchDispCont = UISearchDisplayController(searchBar: searchBar, contentsController: nil) 
     searchDispCont.delegate = self; 
     searchDispCont.searchResultsDataSource = self; 
     searchDispCont.searchResultsDelegate = self; 

     self.view.addSubview(tableView) 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if tableView == self.searchDisplayController!.searchResultsTableView { //fatal error: unexpectedly found nil while unwrapping an Optional value 
      return self.filterUsers.count 
     } else { 
      return self.userMatches.count 
     } 
    } 
} 

ответ

1

Да, searchDisplayController свойство вашей точки зрения контроллера имеет тип UISearchDisplayController? (необязательный), и nil внутри tableView(_:numberOfRowsInSection:). Когда вы принудительно разворачиваете опцию, используя !, ваше приложение будет генерировать исключение во время выполнения (тот, который вы видите), когда значение равно nil.

Причина, по которой свойство nil является то, что вы создаете его программно и указав nil для аргумента contentsController. Это должно, скорее всего, будет:

var searchDispCont = UISearchDisplayController(searchBar: searchBar, contentsController: self) 

Это неявно присвоить его searchDisplayController собственности на ваш взгляд контроллера.

Кроме того, стоит отметить, что UISearchDisplayController и UISearchDisplayDelegate устарели в iOS 8, поэтому вместо этого вы должны использовать UISearchController.

+0

Спасибо, но это все еще происходит с той же ошибкой? –

+0

Любопытный. Документы указывают, что свойство 'searchDisplayController' установлено, когда инициализирован' UISearchDisplayController'. Конечно, если 'tableView (_: numberOfRowsInSection:)' вызывается _before_, вы создаете контроллер отображения поиска, вы все равно увидите крах, но я не могу быть уверен, что это происходит или нет ... кажется маловероятным что вы создаете его, прежде чем добавлять представление таблицы в качестве подзапроса. – Stuart

+0

Было бы это связано с 'self.searchDisplayController !.searchResultsTableView', который ссылается на функцию, не так ли? Я выбрал этот код из других источников, поэтому, пытаясь понять, что происходит полностью ... –

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

  • Нет связанных вопросов^_^