簡體   English   中英

不在Coredata的Tableview中顯示搜索結果?

[英]Not Showing Search results in Tableview From Coredata?

您好,我正在創建一個用於存儲大學數據和學生數據的應用程序,Crud 操作與 Coredata 中的關系完美配合,我在使用搜索欄從 tableview 搜索數據時遇到問題。 我正在以編程方式創建 UISearch 欄。 我也有一些人做了一些研究,但對我沒有任何幫助。 誰能告訴我為什么會這樣。 我也進行了調試......在這條線上我發現了問題。

for name in collegeList{
        if((name.collegeName?.lowercased().contains(searchText.lowercased())) != 
   nil) 
       {
        filteredData.append(name)
        }
    }

這是我的詳細信息:-

import UIKit
import TransitionButton
import CoreData
class CollegeListViewController: 
CustomTransitionViewController,UISearchResultsUpdating, 
UISearchBarDelegate,UISearchControllerDelegate{
@IBOutlet weak var collegeTableView: UITableView!
var collegeList = [College]()
var filteredData = [College]()
var searching = false
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
    super.viewDidLoad()
    collegeTableView.delegate = self
    collegeTableView.dataSource = self
    //collegeList = DataBaseHelper.shared.fetchCollegeList()
}


override func viewWillAppear(_ animated: Bool) {
    ConfigurationSearchController()
    collegeList = DataBaseHelper.shared.fetchCollegeList()
    DispatchQueue.main.async {
        self.collegeTableView.reloadData()
    }
}

@IBAction func collegeAddDataButtonTapped(_ sender: UIBarButtonItem) {
    let formVC : CollegeFormViewController = 
self.storyboard?.instantiateViewController(withIdentifier: "CollegeFormViewController") as! CollegeFormViewController
    self.navigationController?.pushViewController(formVC, animated: true)
}

func ConfigurationSearchController(){
    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    searchController.loadViewIfNeeded()
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.enablesReturnKeyAutomatically = false
    searchController.searchBar.returnKeyType = UIReturnKeyType.done
    self.navigationItem.searchController = searchController
    self.navigationItem.hidesSearchBarWhenScrolling = false
    definesPresentationContext = true
    searchController.searchBar.placeholder = "Search"
    
    
    
    
}

func updateSearchResults(for searchController: UISearchController) {
    let searchText = searchController.searchBar.text!
    if !searchText.isEmpty{
        searching = true
        filteredData.removeAll()
        //guard let college = collegeList else { return }
        for name in collegeList{
            if ((name.collegeName?.lowercased().contains(searchText.lowercased())) != 
       nil) 
           {
            filteredData.append(name)
            }
        }
    } else {
        searching = true
        filteredData.removeAll()
        filteredData = collegeList
    }
    collegeTableView.reloadData()
}

}


  extension CollegeListViewController : UITableViewDelegate, UITableViewDataSource {

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
 {
    if searching{
        return filteredData.count
    } else {
        return collegeList.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> 
 UITableViewCell {
    let cell = collegeTableView.dequeueReusableCell(withIdentifier: "collegeCell") 
as! CollegeListTableViewCell
    let row = collegeList[indexPath.row]
    if searching {
        let filter = filteredData[indexPath.row]
        cell.lblAddress.text = filter.collegeAddress
        cell.lblCollegeName.text = filter.collegeName
        cell.lblCity.text = filter.collegeCity
        cell.lblUniversity.text = filter.collegeUniversity
    } else {
        cell.lblAddress.text = row.collegeAddress
        cell.lblCollegeName.text = row.collegeName
        cell.lblCity.text = row.collegeCity
        cell.lblUniversity.text = row.collegeUniversity
    }
    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

這是我的 Coredata 函數詳細信息:-

import Foundation
import CoreData
import UIKit

class DataBaseHelper: NSObject {

static let shared = DataBaseHelper()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

func saveData(object : [String : String]) {
    let college = NSEntityDescription.insertNewObject(forEntityName: "College", into: context) as! College
    college.collegeName = object["collegeName"]
    college.collegeAddress = object["collegeAddress"]
    college.collegeCity = object["collegeCity"]
    college.collegeUniversity = object["collegeUniversity"]
    
    do {
        try context.save()
    } catch let error {
        print(error.localizedDescription)
    }
    
}
func fetchCollegeList()-> [College] {
    var college = [College]()
    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "College")
    do {
        college =  try context.fetch(fetchRequest) as! [College]
    } catch let error {
        print(error.localizedDescription)
    }
    return college
}

func deleteData(index:Int) -> [College] {
    var college = fetchCollegeList()
    context.delete(college[index])
    college.remove(at: index)
    do {
        try context.save()
    } catch  {
        print(error.localizedDescription)
    }
    return college
}

func editData(object:[String: String], index: Int) {
    let college = fetchCollegeList()
    college[index].collegeName = object["collegeName"]
    college[index].collegeUniversity = object["collegeUniversity"]
    college[index].collegeAddress = object["collegeAddress"]
    college[index].collegeAddress = object["collegeAddress"]
    do {
        try context.save()
    } catch  {
        print(error.localizedDescription)
    }
}}
class CollegeListViewController:
CustomTransitionViewController,UISearchResultsUpdating,
UISearchBarDelegate,UISearchControllerDelegate{
@IBOutlet weak var collegeTableView: UITableView!
var collegeList = [College]()
var filteredData = [College]()
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
    super.viewDidLoad()
    collegeTableView.delegate = self
    collegeTableView.dataSource = self
    collegeList = DataBaseHelper.shared.fetchCollegeList()
    filteredData = collegeList
}

override func viewWillAppear(_ animated: Bool) {
    ConfigurationSearchController()
    collegeTableView.reloadData()
}

@IBAction func collegeAddDataButtonTapped(_ sender: UIBarButtonItem) {
    let formVC : CollegeFormViewController =
    self.storyboard?.instantiateViewController(withIdentifier: "CollegeFormViewController") as! CollegeFormViewController
    self.navigationController?.pushViewController(formVC, animated: true)
}

func ConfigurationSearchController(){
    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    searchController.loadViewIfNeeded()
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.enablesReturnKeyAutomatically = false
    searchController.searchBar.returnKeyType = UIReturnKeyType.done
    self.navigationItem.searchController = searchController
    self.navigationItem.hidesSearchBarWhenScrolling = false
    definesPresentationContext = true
    searchController.searchBar.placeholder = "Search"
}

func updateSearchResults(for searchController: UISearchController) {
    let searchText = searchController.searchBar.text!
    guard !searchText.isEmpty else {
        filteredData = collegeList
        return
    }
    filteredData = collegeList.filter({ $0.collegeName.lowercased().contains(searchText.lowercased() )})
    collegeTableView.reloadData()
}

}

擴展 CollegeListViewController: UITableViewDelegate, UITableViewDataSource {

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->
UITableViewCell {
    let cell = collegeTableView.dequeueReusableCell(withIdentifier: "collegeCell")
    as! CollegeListTableViewCell
    let filter = filteredData[indexPath.row]
    cell.lblAddress.text = filter.collegeAddress
    cell.lblCollegeName.text = filter.collegeName
    cell.lblCity.text = filter.collegeCity
    cell.lblUniversity.text = filter.collegeUniversity
    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

}

我認為現在應該這樣做。 基本上你不需要searching變量。 您只需將集合上的過濾列表用於所有內容,並保留collegeList 僅用於過濾結果並刷新過濾列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM