gpt4 book ai didi

ios - 使用 didSelectRowAtIndexPath 在 CoreData 中使用 UISearchBar segue

转载 作者:行者123 更新时间:2023-11-29 02:15:30 25 4
gpt4 key购买 nike

我有一个 Core Data 项目设置为 Master-Detail VC。我添加了一个 UISearchBar 到它正常工作。当我点击单元格时,它垄断了我不好意思承认的大量时间(这很糟糕)是让它正确显示详细信息。

我一直在尝试使用 prepareForSegue,但我的导师建议我使用 didSelectRowAtIndexPath 来转至 DetailVC

这是我尝试做的事情:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var selectedNote: Note

// Check to see which table view cell was selected.
if tableView == self.tableView {
selectedNote = self.fetchedResultsController.objectAtIndexPath(indexPath) as! Note
} else {
selectedNote = self.searchController.filteredObjects[indexPath.row]
}

// Set up the detail view controller to show.
let detailViewController = DetailViewController()

// Note: Should not be necessary but current iOS 8.0 bug requires it.
tableView.deselectRowAtIndexPath(tableView.indexPathForSelectedRow()!, animated: false)

navigationController?.pushViewController(detailViewController, animated: true)
}

对于上面的代码,编译器说 'UISearchController' 没有名为 'filteredObjects' 的成员

我很困惑,因为我已经在 MasterViewController 类的顶部进行了设置。

这是设置信息:

class MasterViewController: UITableViewController, NSFetchedResultsControllerDelegate, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate {

var detailViewController: DetailViewController? = nil
var addNoteViewController:AddNoteViewController? = nil
var managedObjectContext: NSManagedObjectContext? = nil

// Added variable for UISearchController
var searchController: UISearchController!
var searchPredicate: NSPredicate?
var filteredObjects : [Note]? = nil

override func viewDidLoad() {
super.viewDidLoad()

self.navigationItem.leftBarButtonItem = self.editButtonItem()

if let split = self.splitViewController {
let controllers = split.viewControllers
let context = self.fetchedResultsController.managedObjectContext
let entity = self.fetchedResultsController.fetchRequest.entity!
self.detailViewController = controllers[controllers.count-1].topViewController as? DetailViewController
}

// UISearchController setup
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = searchController?.searchBar
self.tableView.delegate = self
self.definesPresentationContext = false
}

以下是 UISearchBar 方法:

// MARK: - UISearchResultsUpdating Delegate Method
// Called when the search bar's text or scope has changed or when the search bar becomes first responder.
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = self.searchController?.searchBar.text // steve put breakpoint
println(searchController.searchBar.text)
if let searchText = searchText {

// This sets up the seachPredicate and filteredObjects array
searchPredicate = NSPredicate(format: "noteBody contains[c] %@ OR noteTitle contains[c] %@", searchText, searchText)
filteredObjects = self.fetchedResultsController.fetchedObjects?.filter() {
return self.searchPredicate!.evaluateWithObject($0)
} as! [Note]?

self.tableView.reloadData()
println(searchPredicate)
}
}

// MARK: - UISearchBar Delegate methods

func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
updateSearchResultsForSearchController(self.searchController)
}

// This resets searchPredicate & filteredObjects when the SearchController is dismissed
func didDismissSearchController(searchController: UISearchController) {
println("didDismissSearchController")
self.searchPredicate = nil
self.filteredObjects = nil
self.tableView.reloadData()
}

最佳答案

我知道当你盯着你的代码太久以至于你错过了明显的感觉时的感觉:

selectedNote = self.searchController.filteredObjects[indexPath.row] 

应该是

if let filteredObjects = filteredObjects {
selectedNote = filteredObjects[indexPath.row]
}

因为您将 filteredObjects 声明为 MasterViewController 的实例变量

关于ios - 使用 didSelectRowAtIndexPath 在 CoreData 中使用 UISearchBar segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795154/

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