Iphone Objective-C有选择地从plist填充表格;如果key等于

Iphone Objective-C有选择地从plist填充表格;如果key等于,iphone,objective-c,ios,uitableview,plist,Iphone,Objective C,Ios,Uitableview,Plist,plist1是一个由40个字典组成的数组,每个字典有4个字符串。 plist2也是一个数组,但由120个字典组成,每个字典有2个字符串 如果我在一张表格中列出了曲棍球联盟中的所有球队(由plist1中的某个键填充),那么就说我选择了第五个。这将推送一个新表。plist2中的120本词典有两个字符串——每本词典都有一个字符串,依次表示联赛一年的历史,还有一个字符串表示当年的冠军得主。我希望第二个表只列出字典的第二个键与第一个表plist1中选择的团队名称相同的年份。所以,当我从第一个表格中选择“5

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

如果我在一张表格中列出了曲棍球联盟中的所有球队(由plist1中的某个键填充),那么就说我选择了第五个。这将推送一个新表。plist2中的120本词典有两个字符串——每本词典都有一个字符串,依次表示联赛一年的历史,还有一个字符串表示当年的冠军得主。我希望第二个表只列出字典的第二个键与第一个表plist1中选择的团队名称相同的年份。所以,当我从第一个表格中选择“5”队时,我希望看到的是“5”队在第二个表格中获胜的年份。我们的想法是,所有的年份都将出现在plist2中,但不相关的年份将被阻塞在实际的表中

我怎么能说“如果用户选择了团队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);
此设置创建4个字典和一个字典数组。过滤器表达式现在搜索所有包含的对象,其中
key2
等于
1
,应该是
testA
testC
。瞧,这就是输出:

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

通过这种方式,您可以创建一个谓词以按团队名称进行筛选,并创建数组的筛选版本。通常,这适用于支持键值编码的所有类型的对象(这是
NSDictionary
所做的,更多信息:)

感谢您的回复!有没有办法在plists中使用现有数组,而不是在代码中创建新的字典?也许我可以打电话给他们。。。?我对第一个表这样做:
-(void)viewDidLoad{[super viewDidLoad];NSString*path=[[NSBundle mainBundle]pathForResource:@“plist”类型的“ChronoWSH”;NSArray*tmpArray=[[NSArray alloc]initWithContentsOfFile:path];self.chronousicallyarray=tmpArray;[tmpArray release];
then
cell.textLabel.text=[[self.timeroicallyarray objectAtIndex:indexath.row]objectForKey:YEAR\u KEY]当然,字典只是用来创建示例的。在你的代码中,你可以从NSPredicate行开始,直接在你自己的plist数组中使用
filteredarrayingpredicate
。这很有意义,谢谢。我不太明白的最后一件事是
@“key2==%@”,“1”]
我应该在其中添加什么来确保程序加载正确的字符串,因为字符串会因团队而异。它必须是一个变量。我是否必须通过说key2是团队的名称,并且key2必须等于名称的字符串来设置它?我相当缺乏经验,感谢您的耐心。
key2
是使用的键在用于筛选的字典中。我假设您的字典的设置方式是,有一个名为“teamname”的键和一个具有适当值的键“year”。然后您将使用
teamname
而不是
key2
,并且您可以使用一个变量作为要筛选的团队名称,而不是常量
@“1”
在我的示例中。好的,很抱歉,我只是不确定如何定义该变量。我是否必须为didSelectRowAtIndexPath创建一个NSString,然后插入该NSString作为我的变量?