Objective-C从plist中select性地填充表; 如果键等于

plist1是一个由40个字典组成的数组,每个string有4个string。 plist2也是一个数组,但有120个字典,每个string有2个string。

如果我把所有的队列在一张桌上的曲棍球联盟里(用plist1中的某个关键词填写),我会select第五个。 这推动了一个新的表格。 plist2中的120个字典有两个string – 每个字符有一个联盟历史的一年,一个是那年赢得冠军的。 我希望这个第二个表只列出字典第二个密钥与第一个表plist1中刚刚select的同一个团队名称的年份。 所以,当我从第一张表中select“5”组时,我希望看到第二张表中只有“5”组获胜的年份。 这个想法是,所有的年份都会出现在plist2中,但是不相关的将会在实际的表格中被阻塞。

我怎么能说:“如果用户select了X队,那么只显示X队的年份,而不是全年。”

谢谢!

其实你可以使用NSPredicate很好地进行这种过滤:

 NSDictionary *testA = [NSDictionary dictionaryWithObjectsAndKeys:@"valA", @"key1", @"1", @"key2", nil]; NSDictionary *testB = [NSDictionary dictionaryWithObjectsAndKeys:@"valB", @"key1", @"2", @"key2", nil]; NSDictionary *testC = [NSDictionary dictionaryWithObjectsAndKeys:@"valC", @"key1", @"1", @"key2", nil]; NSDictionary *testD = [NSDictionary dictionaryWithObjectsAndKeys:@"valD", @"key1", @"3", @"key2", nil]; NSArray *testArr = [NSArray arrayWithObjects:testA, testB, testC, testD, nil]; NSPredicate *pred = [NSPredicate predicateWithFormat:@"key2 == %@", @"1"]; NSArray *testFilter = [testArr filteredArrayUsingPredicate:pred]; NSLog(@"%@", testFilter); 

这个设置创build了4个字典和一个数组。 filterexpression式现在searchkey2等于1所有包含的对象,应该是testAtestC 。 瞧,输出:

 2011-11-24 18:57:07.822 testapp[9977:f803] ( { key1 = valA; key2 = 1; }, { key1 = valC; key2 = 1; } ) 

通过这种方式,您可以创build一个谓词来按照您的团队名称进行过滤,并创build数组的过滤版本。 一般来说,这适用于支持键值编码的各种对象( NSDictionary所做的更多信息: http : //developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples .html#// apple_ref / doc / uid / 20002170 )