gpt4 book ai didi

ios - 在 TableView 中显示搜索结果时没有结果 - swift

转载 作者:搜寻专家 更新时间:2023-11-01 06:19:25 27 4
gpt4 key购买 nike

我正在尝试在 UITableViewController 中实现搜索,但不是基于过滤现有数组,而是调用我的 API 来搜索远程数据库中的值。

我认为我正确地实现了所有内容,因为我的 textDidChangecellForRowAtIndexPath在适当的时间调用方法,我的数据数组包含我需要的所有数据。但是 - 我的 TableView 中没有显示任何内容!它总是说“没有结果”。我在 SO 上找不到任何现有的解决方案,因为许多类在 iOS 8 中被弃用,而且我正在努力实现最近的类。任何帮助表示赞赏!我的代码:

class QuestionsController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate {

@IBOutlet weak var searchBar: UISearchBar!
var searchController = UISearchController()
var searchText: String?
var areSearchResultsExhausted: Bool = false

override func viewDidLoad() {
super.viewDidLoad()
self.searchController = UISearchController(searchResultsController: self)
self.searchBar.delegate = self
self.searchController.searchResultsUpdater = self
self.searchController.hidesNavigationBarDuringPresentation = false
self.searchController.dimsBackgroundDuringPresentation = false
self.searchController.searchBar.sizeToFit()
self.getQuestionsData(0, searchText: nil)
}

var questionsDataObjects = [Question]()

// MARK: - Get data from API
func getQuestionsData(startFromQuestionId: Int, searchText: String?) {
// Getting data from API stuff like:
let task = session.dataTaskWithRequest(req) { ... }
questionsDataObjects.append(...)
self.tableView.reloadData()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return questionsDataObjects.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("QuestionCell", forIndexPath: indexPath) as! BasicQuestionCell

// Populate the table view cells
let questionCell = questionsDataObjects[indexPath.row]
cell.titleLabel.text = questionCell.content

// Load more results when user scrolled to the end
if (indexPath.row == questionsDataObjects.count-1
&& questionsDataObjects.count > indexPath.row
&& !areSearchResultsExhausted) {
print("qDO.count: \(questionsDataObjects.count) ; indexPath.row: \(indexPath.row)")
self.getQuestionsData(indexPath.row + 1, searchText: self.searchText)
}

return cell
}

// Handle searching
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
self.searchText = searchText
self.areSearchResultsExhausted = false
questionsDataObjects.removeAll()
self.getQuestionsData(0, searchText: searchText)
tableView.reloadData()
}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
self.searchText = nil
self.areSearchResultsExhausted = false
questionsDataObjects.removeAll()
self.getQuestionsData(0, searchText: searchText)
}

func updateSearchResultsForSearchController(searchController: UISearchController) {

}

还有两件事很重要:

1) updateSearchResultsForSearchController永远不会被调用!

2) 我在控制台中遇到一个错误:Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController...>)但是当我试图解决这个问题时,我的搜索栏完全停止工作了......

最佳答案

明白了。问题是:当我将搜索栏拖到 Storyboard 中时,我选择了“搜索栏和搜索显示 Controller ”而不是“搜索栏”本身。 Search Display Controller(已在 iOS8 及更高版本中弃用)使代码无法运行。

因此,我不得不从 Document Outline 中删除 Search Display Controller,将 outlet 重新连接到新的 Search Bar 并且它起作用了。希望对某人有所帮助。

关于ios - 在 TableView 中显示搜索结果时没有结果 - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com