我对如何使用plist并将其用作具有2个部分的pickerview的数据源感到困惑。我的plist是一个数组列表。我想用第1部分作为键填充选择器视图,然后用相应的数组填充第2部分。
我有以下plist格式:
我不确定如何将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'
显然我在这里走错了路,希望有一些方向......
答案 0 :(得分:0)
尝试创建排序键的方式不正确。试试这个:
NSString *filmTypePath = [[NSBundle mainBundle] pathForResource:@"photographic-film" ofType:@"plist"];
filmTypesDict = [[NSDictionary alloc] initWithContentsOfFile:filmTypePath];
filmTypesArray = [[filmTypesDict allKeys] sortedArrayUsingSelector:@selector(compare:)];
并且不需要任何这些数组是可变的。
您使用的方法是尝试根据键的相应值对键进行排序。您只需要按字母排序,而不考虑其值。