对来自对象数组的数据使用initWithObjects

时间:2012-04-12 08:41:47

标签: xcode arrays uipickerview

假设我有很多对象:

@interface City : NSObject {
    NSString  *name;
    NSString  *country;
    int       yearFirstTimeVisited;
}

存储在一个对象数组中:

city = [[City alloc] initWithName:@"London":@"UK",2002];
[pickerValues addObject:city];
city = [[City alloc] initWithName:@"Paris":@"France",2003];
[pickerValues addObject:city];
city = [[City alloc] initWithName:@"LA":@"USA",2003];
[pickerValues addObject:city];

现在我想把城市加载到捡拾轮。当然我可以手动完成:

pickerValues = [[NSMutableArray alloc] initWithObjects:@"London",@"Paris", @"LA",nil];

但这导致我必须在代码中维护两组数据。我确信有更好的选择。我在网上搜索过,但找不到任何东西。

由于

2 个答案:

答案 0 :(得分:3)

更好的是,使用Key-Value Coding-[NSArray valueForKey:]将为您完成循环。

NSArray* pickerNames = [pickerValues valueForKey:@"name"];

答案 1 :(得分:2)

您可以为选择器创建一个新数组。

NSMutableArray *pickerNames = [NSMutableArray arrayWithCapacity:[pickerValues count]];
for(City *city in pickerValues){
    [pickerNames addObject:[city name]];
}

最佳做法是为自定义类添加前缀,例如VCCity,而不只是City。我从您的用户名中选择VC,但从项目名称中选择字母很常见。