2016-08-17 2 views
0

情報、名前、日付などを格納する単純なCoreDataアプリケーションがあり、すべて動作しています。検索方法があり、NSArrayControllersetFetchPredicateが使用され、結果が表に表示されます。これは機能しています。NSArrayController setFetchPredicate

このメソッドの最後に追加コードを追加すると、メソッドが終了する直前にNSArrayControllerのカウントを取得するための単純な行が追加されました。

[searchArrayController setFetchPredicate: searchPredicate]; 

    [searchArrayController rearrangeObjects]; 

    NSlog(@"Count = %lu", (unassigned long)[[searchArrayController arrangedObjects] count]); 

結果:= 1200

を数える(1200データベース内のオブジェクトの数である。)

表が正しく表示、すなわちデータオブジェクトの正確な数は、しかしNSLog数を表示データベース全体です。

私はメソッドの最初にNSLogを配置しました。 2回目に検索を実行すると、2番目のNSLogには正しい数のオブジェクトが表示されます。

Beginning method: 
    NSlog(@"A-Count = %lu", (unassigned long)[[searchArrayController arrangedObjects] count]); 
    ... 

    [searchArrayController setFetchPredicate: searchPredicate]; 

    [searchArrayController rearrangeObjects]; 

    NSlog(@"B-Count = %lu", (unassigned long)[[searchArrayController arrangedObjects] count]); 
    end of method 

結果:

最初の実行:

A-カウント= 1200

B-カウント= 1200

NSTableディスプレイオブジェクトの正しい数

セカンドラン:

A-カウント= 4(これは検索パラメータの正しい)

B-カウント=

それはNSArrayControllerはまだ場合、述語に基づいてフィルタリングされていない方法も初めて出現4 B-Count NSLogが呼び出されます。しかし、これはメソッドの最後で、NSArrayControllerをこの時点でフィルタリングする必要があります。

私はここで何か簡単なものを見逃している必要があります - どんな助けもありがたいです。

答えて

0

rearrangeObjectsfilterPredicateを使用していただきありがとうございます。 fetchfetchPredicateを使用しますが、fetchは実行ループの次の反復まで延期されます。

+0

これは、fetchPredicateではなくfilterPredicateを使用する必要がありました - ありがとうございます。 – littleDrummerBoy

関連する問題