我正在开发一款iPhone应用程序,它有很多不同的卡片,每张卡片代表一辆汽车。因此,每张卡都有一些实例变量和一个图像。我的班级CarCard正在从.plist文件中加载每辆汽车的数据。我想在循环中创建许多实例,以便为每个实例指定不同的名称。 E.g:
CarCard *car1 = [[CarCard alloc] initWithSomeINfo: info];
....... *car2 ..........................................;
....... *carN ..........................................;
其中N是汽车的数量。问题是我不知道N每次的数量是多少。所以我必须在循环中创建实例,但我找不到如何为实例赋予不同的名称。
答案 0 :(得分:2)
NSMutableArray
个CarCard
个对象是一个更好的方法。在循环之外实例化它:
NSMutableArray *cardArray = [[NSMutableArray alloc] init];
然后在你的循环中你将添加你的对象:
[cardArray addObject:car];
现在您可以通过索引访问它们:
// Card 9, numbering starts at 0
myCar = [cardArray objectAtIndex:8];
已编辑添加
如果您想通过名称而不是他们在阵列中的位置来引用卡片,并且名称将是唯一的,您可以使用字典并按名称参考卡片。在循环之外实例化字典:
NSMutableDictionary *cardDictionary = [[NSMutableDictionary alloc] init];
然后在循环内你将添加你的对象:
[cardDictionary setObject:car forKey:cardName];
现在您可以按名称访问它们:
// Card with the key named "card9"
myCar = [cardDictionary objectForKey:@"card9"];
// Card with the key named "monkey"
myCar = [cardDictionary objectForKey:@"monkey"];
答案 1 :(得分:0)
为什么不创建CarCard实例并简单地将它们添加到数组中?如果您知道N是什么,那么您的循环非常简单:
NSMutableArray *carCards = [[NSMutableArray alloc] initWithCapacity:N];
for(int i=0; i<N; i++) {
NSDictionary *car = [NSDictionary dictionaryWithContentsOfFile:<plist-i>];
CarCard *carCard = [[[CarCard alloc] initWithSomeInfo:car] autorelease];
[carCards addObject:carCard];
}
像这样的东西。这有用吗?
答案 2 :(得分:0)
您可以创建一个NSMutableDictionary并填充它。假设你已经知道(从plist)你需要创建多少个值,你可以这样写:
for (int count = 1; count <= totalCars; count++)
[carDict setObject:[[CarCard alloc] initWithSomeInfo:info] forKey:[NSString stringWithFormat:@"car%d", count]];
然后你可以获得任何编号的对象:
CarCard someCard = [carDict objectForKey:[NSString stringWithFormat:@"car%d", selectedNumber]];
或者,您可以使用NSDictionary的allValues
方法获取值的数组:
NSArray *allCards = [carDict allValues];