0

私は配列コントローラーを持っていて、それにエンティティをバインドし、記述子と述語を並べ替えました。アプリの実行時に述語の形式を変更すると、それが機能するため、バインディングが機能しています。

私の問題は、述語を変更したいときです。ユーザーが入力した検索語または文字列では何も起こりませんが、コア データ データベースにレコードを追加すると、テーブルビューが更新されます。

私の質問は、述語が変更され、それ自体を更新する必要があることをアレイコントローラーにどのように伝えるかです。検索語を入力すると実行されるコードを次に示します。これも機能し、すべての NSLogs 出力が正しく取得されます。私のテーブルビューだけが更新されていません。

- (IBAction)didChangeSearch:(id)sender {
    if (sender == searchField) {
        NSString *searchterm = [sender stringValue];
        if (searchterm.length > 1) {
            predicate = [NSPredicate predicateWithFormat:@"name contains [c]%@", @"m"];
            NSLog(@"Putting predicate to the job : %@", searchterm);

        } else {
            predicate = nil;
            NSLog(@"There is nolonger any predicate");
        }
    }
    NSLog(@"I just got %@", [sender stringValue]);
}

最初に言いたいのは、私はバインディングに非常に慣れていない、今夜までそれらを使用したことがない、それらに良い感触を得て、それが好きで、非常に多くのコードを節約し、最終的にそれを理解した (1 日ほど)できる)。

4

1 に答える 1

2

self.predicate = ..... を使用する必要があります。これにより、適切な KVO 通知が送信され、テーブルビューがすぐに更新されます (これは、「述語」がプロパティであり、配列コントローラーのフィルター述語にバインドされていることを前提としています)。バインディング)。

于 2012-05-19T01:21:13.163 に答える