搜索显示控制器更新 table 查看

search display controller update table view

我正在开发一个应用程序,目标 iOS 是 7.0。所以我使用搜索显示控制器。当我尝试搜索时,我发出 api 请求,结果比搜索显示控制器更新 table 视图晚。所以它是空的,虽然我有搜索结果。我试过

self.searchDisplayController?.searchResultsTableView.reloadData()

从请求中获取数据后立即执行,但无法正常工作。

这是我的逻辑:

  func filterContextForSearchText(searchText: String) {
    BooksWorker.searchForBooks(searchText) { foundBooks in
      self.foundBooks = foundBooks
      if BooksWorker.books != nil {
        self.filteredBooks = BooksWorker.books.filter { book in
          return (book.name?.lowercaseString.containsString(searchText.lowercaseString))!
        }
      }
      self.searchDisplayController?.searchResultsTableView.reloadData()
    }
  }

  func searchDisplayController(controller: UISearchDisplayController, shouldReloadTableForSearchString searchString: String?) -> Bool {
    isSearch = true
    filterContextForSearchText(searchString!)
    return true
  }

我以这种方式更新我的 table视图:

  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if isSearch {
      tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
      return filteredBooks.count
    } else {
      if BooksWorker.books != nil {
        tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
        return (BooksWorker.books?.count)!
      } else {
        showEmptyTableView()
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        return 0
      }
    }
  }

  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 100
  }

  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if isSearch {
      let cell = tableView.dequeueReusableCellWithIdentifier(AppData.CellIdentifiers.UndownloadedBookCell) as! UndownloadedBookCell
      print("making cell")
      cell.setBook(foundBooks[indexPath.row])
      cell.delegate = self
      return cell
    } else {
      let cell = tableView.dequeueReusableCellWithIdentifier(AppData.CellIdentifiers.BookCell) as! BookCell
      cell.setBook(BooksWorker.books![indexPath.row])
      return cell
    }
  }

有人有想法吗?

你应该更新 tableView 而不是 searchDisplay self.tableView.reloadData()