3

iOS 開発クラスの課題の一環として、Swift で作成された Core Data プロジェクトに UISearchBar を追加する任務を負っています。

テキストを managedObjectContext 内のオブジェクトと比較する検索バーを取得する方法がわかりません。述語を設定し、いくつかの変数を追加する必要があることはわかっています。私を押しつぶしているのは、「方法」と「場所」です。

私がしなければならないと思うこと

managedObjectContext はコードでインスタンス化され、TVC に表示されるオブジェクトがあります。

を検索してにオブジェクトをダンプするには、NSPredicateに基づいてを設定する必要があります。これはそれほど難しいことではないはずですが、難しいと思います。searchBar.textmanagedObjectContextfilteredNotes

私が遭遇した問題:

  • Apple のドキュメントには、何UISearchBarができるかが記載されていますが、その方法は記載されていません。
  • Apple のサンプル コードが Xcode 6.3 でコンパイルされない(問題は一部解決済み)

更新: Xcode 6.3 ベータ版を使用しているときに、Apple の Web サイトからサンプル コードを Swift 1.2 にEdit/Convert更新するには、Xcode 内をクリックして更新します。コードはクラッシュせずにコンパイルされますが、Apple のコードでコンソール エラーが発生します。

  • それを行う方法の既存の例は次のとおりです。
    • ...Objective-C および/またはで記述
    • ...静的配列のフィルタリングおよび/または
    • ...廃止された機能の使用

これまでの私のセットアップUISearchBarこの投稿は、Core Data プロジェクトの に を追加するための Swift Rosetta Stone になる可能性がありますViewController。読んでくれてありがとう。考えがある場合は、これまでにセットアップしたものの詳細を以下に示します。

私の Core Data Stack は、AppDelegate.swift「定型コード」を使用してセットアップされています。

私のプロジェクトはMaster-Detail ViewController.

私の唯一の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)

以下は、UISearchBarDelegate オプション メソッド (および searchBar) のセクションです。

 // 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()
}
4

0 に答える 0