gpt4 book ai didi

Swift - 搜索数据未加载

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

我正在尝试使用 Parse 向我的应用程序添加搜索功能,我已经使用 UISearchController 编写了代码,但是由于某种原因,当我加载应用程序并尝试搜索时没有任何效果。我的解析都设置正确,所以我的代码一定有问题!

这里是:

import UIKit
import Parse
class SearchTableViewController: UITableViewController, UISearchResultsUpdating
{

var searchResults = [String]()

var resultSearchController = UISearchController()

override func viewDidLoad()
{super.viewDidLoad()
self.resultSearchController = UISearchController(searchResultsController: nil)
self.resultSearchController.searchResultsUpdater = self
self.resultSearchController.dimsBackgroundDuringPresentation = false
self.resultSearchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = self.resultSearchController.searchBar

}

override func didReceiveMemoryWarning()
{super.didReceiveMemoryWarning()
}



func query()
{
let query = PFQuery(className:"_User")
query.findObjectsInBackgroundWithBlock { (results: [PFObject]?, error: NSError?) -> Void in
if error != nil {
if let objects = results! as [PFObject]! {
for object in objects {
let userName = object.objectForKey("firstName") as! String
self.searchResults.append(userName)
self.tableView.reloadData() //<-- must reloadData()
} } }
}





// MARK: - Table view data source
func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return searchResults.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

cell.textLabel?.text = searchResults[indexPath.row]

return cell
}



func updateSearchResultsForSearchController(searchController: UISearchController)
{
self.searchResults.removeAll(keepCapacity: false)

let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (self.searchResults as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.searchResults = array as! [String]

self.tableView.reloadData()
}

}
}

最佳答案

首先,我认为直接从 parse 进行过滤不是一个好主意。最好从解析中下载所有内容,然后过滤该数据。

所以你的查询函数现在看起来像:

 func query()
{
let query = PFQuery(className:"_User")
query.findObjectsInBackgroundWithBlock { (results: [PFObject]?, error: NSError?) -> Void in
if error != nil {
if let objects = results! as [PFObject]! {
for object in objects {
let userName = object.["firstname"] as! String
self.searchResults.append(userName)
self.tableView.reloadData() //<-- must reloadData()
} } }
}

所以现在你的数组包含来自解析的所有用户的名字

self.tableView.reloadData() should not be in the life cycle viewDidLoad(), and don't forget to call query() into viewDidLoad()

您应该创建另一个数组来保存过滤器的结果。

numberOfRowsInSection() 方法应该有两个选项,其中过滤器数组返回来自搜索栏的过滤器对象或仅来自解析的对象。

cellForRowAtIndexPath 也应该修改,因为您将从过滤器数组或默认数组返回数据

我相信您应该仔细阅读本教程,了解他们的过滤器代码是如何工作的 enter link description here .

关于Swift - 搜索数据未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33967178/

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