0

ノブ警告!私のアプリは、すべてバインディングを介して NSArrayController を介して標準の NSTableView にデータを表示します。すべてクール。

バックグラウンドで BOOL を駆動するチェック ボックスで切り替えられる「完了したタスク」という filterPredicate があります。これは、アプリの実行中、フィルター オン、フィルター オフのときにうまく機能しますが、init または awakeFromNib で BOOL を NO に設定すると、NSArrayContoller は filterPredicate を無視しますが、後で機能します。

述語を使用してフィルター処理された配列を AC に配信することもできますが、推測されたバインディングと直接の filterPredicate の方が適切です。

AC は NIB ファイルで初期化されており、KVO フィードバックを見ると、非常に早い段階で作成されます。filterPredicate は、AppController の初期化時には存在しませんが、awakeFromNIb に到達するまでには存在します。

私が見逃しているアイデアはありますか?

編集: これは、チェック ボックス アクションによって呼び出されるメソッドです。

- (void)displayClosedJobs {
if (self.showClosedJobs)
{
    self.showClosedPredicate=nil;
}
else
{
    NSString *predValue=@"Closed";
    self.showClosedPredicate=[NSPredicate predicateWithFormat:@"!(DisplayName contains[c] %@)",predValue];
}
[self changeTableSortOrder];}

これは、init および awakeFromNib でも呼び出されます。

4

1 に答える 1

0

ほとんどの場合、次のように init/awakeFromNib で bool 変数を直接設定します。

_myBoolVariable = NO;

ただし、バインディングの正しい KVO 通知を送信して変更を通知するために必要なことは、セッター メソッドを明示的に使用することです。

[self setMyBoolVariable:NO];

またはによって

self.myBoolVariable = NO;

ただし、初期化コードを見ずに判断するのは困難です。これが問題でない場合は、変数の初期化方法とバインディングの設定方法について詳細を提供する必要があります。

于 2013-01-11T11:05:44.933 に答える