2016-11-11 3 views
1

私はcoredataエンティティを5列のtableViewにバインドしています。 テーブルビューの並べ替えなどを管理するための配列コントローラを使用しています。SWIFT 3 OSX Cocoa Array ControllerとCoreData Binding "複数の列で検索"

私の問題はバインディングを使用して検索することです。 ArrayControllerにバインドされたsearchFieldがあり、述部フォーマットがデータの最初の列に設定されています。すべてうまく動作します。また、XCODEで述語形式を変更し、別の列で検索することもできます。

私が午前問題は、変更私のコードで述語形式は、ユーザーが自分の好みの欄に検索できるようにする方法を知っている...

私は次のようにArrayControllerを変更しようとしています

let predicate = NSPredicate(format: "projectNumber contains[cd] %@", searchBar.stringValue) 
    searchArrayController.filterPredicate = predicate 

let predicate = NSPredicate(format: "customerName contains[cd] %@", searchBar.stringValue) 
    searchArrayController.filterPredicate = predicate 

projectNumberとCUSTOMERNAMEは私のエンティティの属性です。

このように述語を設定すると、テーブルのデータが消えます。私はそれを検索フィールドの手を加えて再び表示することができますが、それは私の述語設定を無視し、XCODEストーリーボードで元のセットに従います。

ストーリーボードの設定は次のとおりです。 述語フォーマット= projectNumberは、[CD] $値に

が含まれてい

+0

述語設定がsearchFieldのバインディングインスペクタにあり、ArrayControllerにバインドしていることを忘れてしまいました。 –

答えて

0

は、列ごとに結合述語を追加...あなたが提供することができます任意の助けを事前に感謝します。検索フィールドのpredicateをバインドすると、バインディングpredicate2が表示されます。コーディングは必要ありません。

+0

実行時に検索する列を選択する方法を探している人には、アップルはNSMenuを使って検索メニューのポップアップを提供し、Xcodeのバインディングパネルに設定されている各列の述語を設定する機能を提供しています...おそらく、私の考えで列検索の選択肢を提示する最良の方法ではないでしょうプレゼンテーションの柔軟性はもう少しですが、少なくとも実装するのは簡単です.... –