objective -c如何创建一个枚举数组,其字符串值为键?

时间:2010-11-25 12:11:48

标签: objective-c cocoa

我有一个枚举说性别,现在我想将它与字符串值相关联,以便在选择器视图中的视图中使用。它是可可触摸框架,而objective-c是语言。 所以我不知道如何将选择器视图的数据源设置为枚举,就像在其他框架中一样。所以我被告知我必须制作枚举值数组。然后我尝试将thos添加到NSMutableDictionary及其各自的字符串值。 所以我最终得到了

NSArray* genderKeys = [NSArray arrayWithObjects:@"Male",@"Female",nil] ;
NSArray* genderValues = [NSArray arrayWithObjects:[NSNumber numberWithInt:male],[NSNumber numberWithInt:female],nil];

for(int i =0;i<[genderKeys count];i++)
    [_genderDictionary setValue:[genderValues objectAtIndex:i] forKey:[genderKeys objectAtIndex:i]];

并且它没有工作说这不是一个有效的密钥,我已经阅读了密钥编码文章,我现在知道什么是关键和什么是关键路径,但我仍然可以解决这个问题。它毁了我的生命,请帮忙。

对不起伙计们,我正在使用NSDictionary来创建_genderDictionary。但是我在脑海中认为它是不可改变的。谢谢大家。

3 个答案:

答案 0 :(得分:2)

小心使用UI文本作为数据库的键。当您需要将您的应用程序本地化为法语,中文,阿拉伯语等时需要多少金额?

答案 1 :(得分:0)

如果我理解正确,你会尝试创建一个预先填充的词典 您可以使用[NSDictionary dictionaryWithObjectsAndKeys:]

[NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithUnsignedInt:0], @"Male", 
    [NSNumberWithUnsignedInt:1], @"Female", nil]

答案 2 :(得分:0)

这对我有用。运行此代码(您的代码,添加第一行以便编译)似乎工作正常。

NSMutableDictionary *_genderDictionary = [NSMutableDictionary dictionary];
NSArray* genderKeys = [NSArray arrayWithObjects:@"Male",@"Female",nil] ;
NSArray* genderValues = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil];

for(int i =0;i<[genderKeys count];i++)
    [_genderDictionary setValue:[genderValues objectAtIndex:i] forKey:[genderKeys objectAtIndex:i]];

NSLog() - ing _genderDictionary输出此

{
    Female = 2;
    Male = 1;
}

编辑:重新阅读你的问题,让我觉得你正在寻找的是UIPickerView的委托方法......实现–pickerView:titleForRow:forComponent:是你设置选择器中出现的文本的地方。如果你有一个性别的NSArray,你会做类似return [_genderArray objectAtIndex:row];这样的事情,你不需要乱用字典和键。

编辑2:选择器的数据源不能直接作为NSArray或NSDictionary。它必须是一个实现UIPickerView的数据源/委托协议的对象(我想你可以使用NSArray的子​​类,但那可能是cah-ray-zay!)。