2

長い間解決できない問題があります。次の画像のように、サーバーからNSDictionarylastMsgsに解析されるJSON応答があります。 ここに画像の説明を入力してください

したがって、たとえば1323はキーであり、NSDictionary(body、subjectなどのキーと値などのキーを含む)に関連付けられています。したがって、ネストされたNSDictionary値にエントリがあるエントリを何らかの方法で削除する必要がある問題:type=1。これを行う方法がわかりません。私はこれをやろうとしました:

  NSMutableArray* _ModelVals = [[lastMsgs allValues] mutableCopy];
    for (int i =0; i<[_ModelVals count]; i++) {
        string_compare = [NSString stringWithFormat:@"%@" , [_ModelVals objectAtIndex:i]];
        if ([string_compare rangeOfString:@"type = 1"].location != NSNotFound) {
            [_ModelVals removeObjectAtIndex:i];
        }

    }

しかし、それは正しく機能せず、タイプ=1のすべてのエントリを削除するわけではありません。

質問-これを実装してネストされたNSDictionaryのエントリを削除するにはどうすればよいですか?

4

2 に答える 2

6

辞書に「type=1」という値はありません。それはただのログです。[dict objectForKey:@"key"]またはを使用して、辞書のキーの値を取得しますdict[@"key"]

ログから判断すると、タイプはNSNumberではなく、のようNSStringです。それの表現を取得intし(型が整数であると仮定)、単純なCintを使用してint比較します。

そして、そのような配列をフィルタリングすることはできません。エントリをスキップします。エントリを削除する場合は、を減らす必要がありiます1

または、次のより単純なソリューションを使用します。

NSSet *keys = [lastMsgs keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
    return [obj[@"type"] intValue] == 1;
}];
NSMutableDictionary *dict = [lastMsgs mutableCopy];
[dict removeObjectsForKeys:[keys allObjects]];

これにより、最初にタイプを持つすべてのオブジェクト(ディクショナリ)のキーが収集さ1れ、次に元のディクショナリの可変コピーからそれらが削除されます。

于 2013-01-21T15:17:55.693 に答える
1

コレクションを列挙している間は、コレクションにオブジェクトを追加したり、コレクションからオブジェクトを削除したりすることはできません。削除するオブジェクトへの参照を格納できる別の配列を作成し、ループした後にそれらを削除します。

于 2013-01-21T15:14:06.190 に答える