3

述語を使用して NSMutableArray から NSDictionary を取得しようとしています:

NSMutableArray *arr = [NSMutableArray arrayWithArray:[self createArrayFromCSV:savedCSV withDelimiter:delim firstLineContainsKeys:YES]];

// The method «createArrayFromCSV returns an array of dictionaries

NSLog(@"Array %@", [arr objectAtIndex:0]);  // works fine

// spits out: 

// Array {
//     product = "MyProduct";
//     "id_product" = 29;
// }

// idField and idVal are passed to the method

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%@ == %@)", idField, idVal];

NSLog(@"predicate %@", predicate);

// spits out predicate "id_product" == "29"

NSArray *filtered = [arr filteredArrayUsingPredicate:predicate];

NSLog(@"Filtered %@", filtered);

// Filtered is always empty

私が間違っていることは何ですか?

[解決済み] どうやら、書式文字列を間違えたようです。これは機能します:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", idField, idVal];

この投稿によると、NSPredicate predicateWithFormat 属性の名前を渡す

キーまたはキーパスの場合、@K を使用する必要があります

4

2 に答える 2

8

どうやら、フォーマット文字列を間違えたようです。これは機能します:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", idField, idVal];

この投稿によると、 NSPredicate predicateWithFormat 属性の名前を渡す

キーまたはキーパスの場合、@K を使用する必要があります

于 2013-05-25T21:40:32.703 に答える
1

これは私のために働く:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"email contains[c] %@",searchString];

filteredArray = [[NSMutableArray alloc] initWithArray: [[arrayData filteredArrayUsingPredicate:predicate] copy]];
于 2016-09-30T07:40:46.853 に答える