gpt4 book ai didi

ios - UISearchController 未调用的行数

转载 作者:行者123 更新时间:2023-11-30 13:51:39 26 4
gpt4 key购买 nike

我正在尝试发送搜索电影的请求,但是当我点击搜索栏写入文本时,我在 cellforrow 中崩溃,并且它没有调用 numberofrows 也没有调用请求。这是我到目前为止的代码:

class InTheaters: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate {

@IBOutlet weak var poster: UIImageView!
@IBOutlet weak var movieTitle: UILabel!
@IBOutlet weak var date: UILabel!
@IBOutlet weak var duration: UILabel!
@IBOutlet weak var rating: UILabel!
@IBOutlet var theatersTable: UITableView!
@IBOutlet weak var starsView: CosmosView!

var results = [Movie]()
var searchResults = [Search]()
var resultSearchController: UISearchController!
private let key = "qtqep7qydngcc7grk4r4hyd9"

override func viewDidLoad() {
super.viewDidLoad()

self.resultSearchController = UISearchController(searchResultsController: nil)
self.resultSearchController.searchResultsUpdater = self
self.resultSearchController.dimsBackgroundDuringPresentation = false
self.resultSearchController.searchBar.sizeToFit()
self.resultSearchController.searchBar.placeholder = "Search for movies"

self.theatersTable.tableHeaderView = self.resultSearchController.searchBar

self.theatersTable.reloadData()

getMovieInfo()
customIndicator()
infiniteScroll()
}

func customIndicator() {

self.theatersTable.infiniteScrollIndicatorView = CustomInfiniteIndicator(frame: CGRectMake(0, 0, 24, 24))

self.theatersTable.infiniteScrollIndicatorMargin = 40
}

func infiniteScroll() {

self.theatersTable.infiniteScrollIndicatorStyle = .White

self.theatersTable.addInfiniteScrollWithHandler { (scrollView) -> Void in

self.getMovieInfo()
}
}

func getMovieInfo() {

Alamofire.request(.GET, "http://api.rottentomatoes.com/api/public/v1.0/lists/movies/in_theaters.json?page_limit=10&page=1&country=us&apikey=\(key)").responseJSON() {
(responseData) -> Void in

if let swiftyResponse = responseData.result.value {

let movies = Movies(JSONDecoder(swiftyResponse))

for movie in movies.allMovies {

self.results.append(movie)
}
}
self.theatersTable.reloadData()
self.theatersTable.finishInfiniteScroll()
}
}

func updateSearchResultsForSearchController(searchController: UISearchController) {

self.searchResults.removeAll(keepCapacity: false)

if (searchController.searchBar.text?.characters.count > 0) {

Alamofire.request(.GET, "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=N&page_limit=10&page=1&apikey=\(key)").responseJSON() {
(responseData) -> Void in

print(responseData)

if let swiftyResponse = responseData.result.value {

let searches = Searches(JSONDecoder(swiftyResponse))

for search in searches.allSearches {

self.searchResults.append(search)
}
}
self.theatersTable.reloadData()
self.theatersTable.finishInfiniteScroll()
}
}
}

// MARK: - Table view data source

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

return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if (self.resultSearchController.active) {

return self.searchResults.count
} else {

return self.results.count
}
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)

let titleLabel = cell.viewWithTag(1) as! UILabel
let yearLabel = cell.viewWithTag(2) as! UILabel
let durationLabel = cell.viewWithTag(3) as! UILabel
let posterImage = cell.viewWithTag(5) as! UIImageView
let starsTag = cell.viewWithTag(6) as! CosmosView

if (self.resultSearchController.active) {

titleLabel.text = searchResults[indexPath.row].titleMovie
yearLabel.text = searchResults[indexPath.row].yearMovie
durationLabel.text = searchResults[indexPath.row].durationMovie?.description
posterImage.sd_setImageWithURL(NSURL(string: searchResults[indexPath.row].posterMovie!))
starsTag.rating = searchResults[indexPath.row].ratingMovie!
starsTag.settings.updateOnTouch = false
} else {

titleLabel.text = results[indexPath.row].titleMovie
yearLabel.text = results[indexPath.row].yearMovie
durationLabel.text = results[indexPath.row].durationMovie?.description
posterImage.sd_setImageWithURL(NSURL(string: results[indexPath.row].posterMovie!))
starsTag.rating = results[indexPath.row].ratingMovie!
starsTag.settings.updateOnTouch = false
}

return cell
}

我还有一些包含请求信息的结构,请告诉我您是否也需要其中的内容。

最佳答案

发现答案应该在请求之前有reloadData。

func updateSearchResultsForSearchController(searchController: UISearchController) {

self.searchResults.removeAll(keepCapacity: false)

self.theatersTable.reloadData()//should have added this before the request

if (searchController.searchBar.text?.characters.count > 0) {

Alamofire.request(.GET, "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=\(searchController.searchBar.text!)&page_limit=10&page=1&apikey=\(key)").responseJSON() {
(responseData) -> Void in

if let swiftyResponse = responseData.result.value {

let searches = Searches(JSONDecoder(swiftyResponse))

for search in searches.allSearches {

self.searchResults.append(search)
}
}
self.theatersTable.reloadData()
self.theatersTable.finishInfiniteScroll()
}
}
}

关于ios - UISearchController 未调用的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206263/

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