Ios 是否有人成功地将UISearchBar添加到Swift的核心数据项目中

Ios 是否有人成功地将UISearchBar添加到Swift的核心数据项目中,ios,core-data,uisearchbar,uisearchbardelegate,Ios,Core Data,Uisearchbar,Uisearchbardelegate,作为iOS开发类作业的一部分,我的任务是向用Swift编写的核心数据项目添加UISearchBar 我不知道如何让搜索栏将文本与managedObjectContext中的对象进行比较。我知道我需要设置一个谓词,可能还需要添加一些变量。是“如何”和“在哪里”让我心烦意乱 我认为我需要做什么 managedObjectContext在代码中实例化,TVC中显示了一些对象 我需要基于searchBar.text设置NSPredicate,以搜索managedObjectContext并将对象转储到f

作为iOS开发类作业的一部分,我的任务是向用Swift编写的核心数据项目添加UISearchBar

我不知道如何让搜索栏将文本与managedObjectContext中的对象进行比较。我知道我需要设置一个谓词,可能还需要添加一些变量。是“如何”和“在哪里”让我心烦意乱

我认为我需要做什么

managedObjectContext在代码中实例化,TVC中显示了一些对象

我需要基于
searchBar.text
设置
NSPredicate
,以搜索
managedObjectContext
并将对象转储到
filteredNotes
中。这应该不难做到,但我觉得很难做到

我遇到的问题:

  • 苹果的文档告诉我UISearchBar可以做什么,但没有告诉我如何做 它
  • 苹果的示例代码不会在Xcode 6.3中编译(问题部分解决)
更新:要在使用Xcode 6.3 beta版时将示例代码从苹果网站更新为Swift 1.2,您可以在Xcode中单击
编辑/转换
,对其进行更新。即使代码编译时没有崩溃,我还是在苹果的代码中发现了一个控制台错误

  • 现有的示例有:
    • …以Objective-C和/或
    • …用于筛选静态阵列和/或
    • …使用不推荐的功能
我目前的设置 这篇文章可能是一块Swift Rosetta Stone,用于在核心数据项目的
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()
}