Objective-C选择性地从plist中填充表格;如果关键等于

时间:2011-11-24 17:23:04

标签: iphone objective-c ios uitableview plist

plist1是一个包含40个字典的数组,每个字典有4个字符串。 plist2也是一个数组,但有120个字典,每个字符串有2个字符串。

如果我列出一个桌上曲棍球联赛中的所有球队(从plist1中的某个键填充),请说我选择了第五个。这会推动一张新桌子。 plist2中的120个词典有两个字符串 - 每个字符串都有一个联盟历史记录的一年,还有一个是谁赢得了当年的冠军。我希望第二个表只列出字典的第二个键是在第一个表plist1中选择的同一个团队名称的年份。因此,当我从第一张表中选择“5”队时,我希望只能看到第二张表中队伍“5”获胜的年份。这个想法是所有年份都会出现在plist2中,但不相关的那些将在移动中的实际表中被阻止。

我怎么说“如果用户选择了X队,那么只为X队展示年份,而不是所有年份。”

谢谢!

1 个答案:

答案 0 :(得分:2)

实际上你可以使用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);

此设置创建4个词典及其数组。过滤器表达式现在搜索key2等于1的所有包含对象,其中testAtestC应为2011-11-24 18:57:07.822 testapp[9977:f803] ( { key1 = valA; key2 = 1; }, { key1 = valC; key2 = 1; } ) 。瞧,输出是:

NSDictionary

通过这种方式,您可以创建谓词以按团队名称进行过滤,并创建阵列的过滤版本。通常,这适用于支持键值编码的所有类型的对象({{1}}执行,进一步信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html#//apple_ref/doc/uid/20002170