Ios 是否有人成功地将UISearchBar添加到Swift的核心数据项目中
作为iOS开发类作业的一部分,我的任务是向用Swift编写的核心数据项目添加UISearchBar 我不知道如何让搜索栏将文本与managedObjectContext中的对象进行比较。我知道我需要设置一个谓词,可能还需要添加一些变量。是“如何”和“在哪里”让我心烦意乱 我认为我需要做什么 managedObjectContext在代码中实例化,TVC中显示了一些对象 我需要基于Ios 是否有人成功地将UISearchBar添加到Swift的核心数据项目中,ios,core-data,uisearchbar,uisearchbardelegate,Ios,Core Data,Uisearchbar,Uisearchbardelegate,作为iOS开发类作业的一部分,我的任务是向用Swift编写的核心数据项目添加UISearchBar 我不知道如何让搜索栏将文本与managedObjectContext中的对象进行比较。我知道我需要设置一个谓词,可能还需要添加一些变量。是“如何”和“在哪里”让我心烦意乱 我认为我需要做什么 managedObjectContext在代码中实例化,TVC中显示了一些对象 我需要基于searchBar.text设置NSPredicate,以搜索managedObjectContext并将对象转储到f
searchBar.text
设置NSPredicate
,以搜索managedObjectContext
并将对象转储到filteredNotes
中。这应该不难做到,但我觉得很难做到
我遇到的问题:
- 苹果的文档告诉我UISearchBar可以做什么,但没有告诉我如何做 它
- 苹果的示例代码不会在Xcode 6.3中编译(问题部分解决)
编辑/转换
,对其进行更新。即使代码编译时没有崩溃,我还是在苹果的代码中发现了一个控制台错误
- 现有的示例有:
- …以Objective-C和/或
- …用于筛选静态阵列和/或
- …使用不推荐的功能
ViewController
中添加UISearchBar
。谢谢你的阅读。如果你有想法的话,这里是我到目前为止设置的详细信息
我的核心数据堆栈是在AppDelegate.swift
中使用“屏蔽代码”设置的
我的项目设置为主详细视图控制器
我唯一的NSManagedObject
实体有4个属性
我将UISearchBarDelegate
添加到我的“固定代码”MasterVC
的顶部:
class MasterViewController: UITableViewController, NSFetchedResultsControllerDelegate, UISearchBarDelegate
// These get set up in the canned "TableView" code, which I've left out
var detailViewController: DetailViewController? = nil
var addNoteViewController:AddNoteViewController? = nil
var managedObjectContext: NSManagedObjectContext? = nil
@IBOutlet weak var searchBar: UISearchBar! // <- Search Stuff
var searchActive : Bool = false // <- Property for UISearchBar delegate methods
var filteredNotes:[Note] = [] // <- Property for Notes (my NSManagedObject)
类MasterViewController:UITableViewController、NSFetchedResultsControllerDelegate、UISearchBarDelegate
//这些都是在罐装的“TableView”代码中设置的,我已经忽略了
var detailViewController:detailViewController?=无
变量addNoteViewController:addNoteViewController?=无
var managedObjectContext:NSManagedObjectContext?=无
@IBMOutlet弱var搜索栏:UISearchBar!//你看过了吗?那是我看完文档后去的第二个地方。在Xcode 6.3中,它不会编译。与as
相关的大量错误。当我切换到as代码>,清理和构建,它会产生更多错误,并变成一个失败的雪球。下面是一个例子,在Xcode 6.3测试版结束之前,示例代码不会得到更新。在您学习时,我会坚持使用已发布的版本(目前为Xcode 6.1.1)。但是如果您想使用Xcode 6.3,您可以尝试编辑-转换-到Swift 1.2…来迁移代码。
// UISearchBarDelegate methods
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filteredNotes = data.filter({ (text) -> Bool in // <- 'data' should be the Note objects in my managed object context
let tmp: NSString = text
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range.location != NSNotFound
})
if(filteredNotes.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}