1

連絡先の辞書で構成される可変配列があります

[
{
"name":""
"Email":""
type:"A"
},
"name":""
"Email":""
type:"B"
}
"name":""
"Email":""
type:"C"
}........100 contacts
]

セグメント化されたスイッチによって処理されるタイプ A、B、または C でそれらをフィルタリングしたいです。このタイプのケースをフィルタリングするために述語を使用する方法について質問です。

これが私のフィルタリングの実装です

-(NSArray *)filtercontcts:(NSString *)filterParameter
{
    NSArray *filterContacts = [[NSArray alloc]init];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type ==  %@)",filterParameter];

    filterContacts= [contacts filteredArrayUsingPredicate:predicate];

    return filterContacts;

}

助けていただきありがとうございます。

4

2 に答える 2

1

述語を作成する正しい方法は、次のように閉じ括弧を使用しないことです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type ==  %@", filterParameter];

また、メモリを割り当てているため、メモリリークがfilterContacts発生していますが、ポインターを で上書きすると参照が失われますfilteredArrayUsingPredicate:。単に を削除し[[NSArray alloc]init];てリークを取り除きます。

于 2012-11-14T02:31:52.293 に答える
0

このようにしてみてください:-

NSArray *filterContacts = [[NSArray alloc]init];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"category type[cd] %@,filterParameter];
filterContacts=[contacts filteredArrayUsingPredicate:predicate]mutableCopy]; 
于 2013-11-28T11:58:23.920 に答える