我如何Initialize
和allocate
多个具有不同名称的对象并将其传递给NSArray
。从下面的代码中,对象在循环中被初始化一次,我需要按照For循环多次初始化,使用不同的名称...然后将其传递给NSArray
。请检查下面的代码。
当 For 循环开始意味着 i = 0 ..初始化项目为tempItemi
现在,下次当 i = 1且i = 2 时,tempItemi
名称将相同。我可以在循环中更改此...并将其传递给NSArray *items
for (int i = 0; i< [Array count]; i++)
{
id object = [Array objectAtIndex:i];
if ([object isKindOfClass:[NSDictionary class]])
{
NSDictionary *objDict = (NSDictionary *)object;
ECGraphItem *tempItemi = [[ECGraphItem alloc]init];
NSString *str = [objDict objectForKey:@"title"];
NSLog(@"str value%@",str);
float f=[str floatValue];
tempItemi.isPercentage=YES;
tempItemi.yValue=f;
tempItemi.width=30;
NSArray *items = [[NSArray alloc] initWithObjects:tempItemi,nil];
//in array need to pass all the initialized values
[graph drawHistogramWithItems:items lineWidth:2 color:[UIColor blackColor]];
}
}
答案 0 :(得分:4)
为什么不让数组变为可变,然后每次都添加对象:
NSMutableArray *items = [[NSMutableArray alloc] init];
// a mutable array means you can add objects to it!
for (int i = 0; i< [Array count]; i++)
{
id object = [Array objectAtIndex:i];
if ([object isKindOfClass:[NSDictionary class]])
{
NSDictionary *objDict = (NSDictionary *)object;
ECGraphItem *tempItemi = [[ECGraphItem alloc]init];
NSString *str = [objDict objectForKey:@"title"];
NSLog(@"str value%@",str);
float f=[str floatValue];
tempItemi.isPercentage=YES;
tempItemi.yValue=f;
tempItemi.width=30;
[items addObject: tempItemi];
//in array need to pass all the initialized values
}
}
[graph drawHistogramWithItems:items lineWidth:2 color:[UIColor blackColor]];
无论如何,原始代码中的items
每次都会重新初始化,每次都会绘制一个新的直方图,这样你的代码就无法工作......这应该有用......
答案 1 :(得分:1)
你写的代码还可以,但是,
NSArray *items
在每个循环中始终只包含一个项目。
只需声明外部for循环为NSMutableArray
,
并使用您正在使用的相同代码。
答案 2 :(得分:1)
正如你所说,你想要动态变量
ECGraphItem * tempItemi = [[ECGraphItem alloc] init];
这里i
将在循环中改变,
您可以使用您的tempItem1 / 2/3/4 ....作为键创建一个带有键/值的NSDictionary
,并通过alloc / init保存值。
然后,您将使用tempItem32
。
[dict valueForKey:@"tempItem32"]
编辑:
检查此示例是否可以使用
NSMutableDictionary *dict=[NSMutableDictionary new];
for (int i=1; i<11; i++) {
NSString *string=[NSString stringWithFormat:@"string%d",i];
[dict setObject:[NSString stringWithFormat:@"%d", i*i] forKey:string];
}
NSLog(@"dict is %@",dict);
NSString *fetch=@"string5";
NSLog(@"val:%@, for:%@",[dict valueForKey:fetch],fetch);