0

私は、大量の JSON をダウンロードし、そこからかなりの UITableView を作成するプロジェクトに取り組んでいます。

JSON を解析して NSMutableArray に変換し、それを UITableView にフィードします。すべてが機能し、きれいに見えます。

私が抱えている問題は、テーブルビューのフィルタリングを実行するために使用したい辞書オブジェクトが NSMutableArray に含まれていることです。

これは、私が見ている NSMutableArray 内のオブジェクトの NSLog です。

{
id = 123456;
    issues =     (
                {
            id = 4;
            name = "Ape";
        },
                {
            id = 25;
            name = "Chimp";
        },
                {
            id = 28;
            name = "Human";
        }
    );
status = open;
}

私が書きたいのは、NSMutableArray の問題ディクショナリの名前列のいずれかに対する述語フィルターです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"name", @"Human"];
NSArray *predicateFilteredArray = [tableViewArray filteredArrayUsingPredicate:predicate]; 

ただし、問題の名前と一致する述語変数の正しい形式がわかりません。Predicate Programming ガイドを読んで読み直しましたが、スタック オーバーフロー項目の約半分に NSPredicate のフラグが立てられましたが、構文がわかりません。私は SELF の多くのバリエーションを試しましたが、昔から行き詰まっています。

4

2 に答える 2

2

問題を正しく理解していれば、次の述語が機能するはずです。

[NSPredicate predicateWithFormat:@"ANY issues.name == %@", @"Human"]

これにより、少なくとも 1 つの「課題」が「人間」と等しい「名前」を持つ配列からすべてのオブジェクトが得られます。

于 2013-03-04T12:26:39.420 に答える
0

Linq to ObjectiveCと呼ばれるカテゴリ メソッドのライブラリを作成しました。これにより、この種の作業が少し簡単になります。私が収集できるものから、アイテムの配列があります。各アイテムには、issuesそれ自体が配列であるというプロパティがありますか?

「Human」という名前の問題を持つすべてのアイテムを検索する場合は、次の手順を実行できます。

NSArray* matches = [inputArray where:^BOOL(id item) {
    return [[item issues] any:^BOOL(id issue) {
        return [[issue name] equalTo:@"Human"];
    }];
}]

これは、Linq to ObjectiveC のwhereおよびanyメソッドを使用します。

于 2013-03-10T18:43:28.720 に答える