plist作为pickerview的数据源,有2个部分

时间:2014-05-13 22:05:10

标签: ios objective-c plist uipickerview

我对如何使用plist并将其用作具有2个部分的pickerview的数据源感到困惑。我的plist是一个数组列表。我想用第1部分作为键填充选择器视图,然后用相应的数组填充第2部分。

我有以下plist格式: enter image description here

我不确定如何将plist转换为我需要填充pickerview的结构。 在我的控制器(viewDidLoad)中:

    // load plists
NSString *filmTypePath = [[NSBundle mainBundle] pathForResource:@"photographic-film" ofType:@"plist"];
filmTypesDict = [[NSDictionary alloc] initWithContentsOfFile:filmTypePath];

filmTypesArray = [NSMutableArray arrayWithCapacity:[filmTypesDict count]];

for(id key in [filmTypesDict keysSortedByValueUsingSelector:@selector(compare:)]){
    [filmTypesArray addObject:key];
    NSLog(@"%@",key);
}

当然会导致错误:

terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray compare:]: unrecognized selector sent to instance 0x16e7f3a0'
显然我在这里走错了路,希望有一些方向......

1 个答案:

答案 0 :(得分:0)

尝试创建排序键的方式不正确。试试这个:

NSString *filmTypePath = [[NSBundle mainBundle] pathForResource:@"photographic-film" ofType:@"plist"];
filmTypesDict = [[NSDictionary alloc] initWithContentsOfFile:filmTypePath];

filmTypesArray = [[filmTypesDict allKeys] sortedArrayUsingSelector:@selector(compare:)];

并且不需要任何这些数组是可变的。

您使用的方法是尝试根据键的相应值对键进行排序。您只需要按字母排序,而不考虑其值。