使用不同的名称初始化多个对象

时间:2012-12-25 07:16:46

标签: iphone objective-c ios ios5

我如何Initializeallocate多个具有不同名称的对象并将其传递给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]];
    }
}

3 个答案:

答案 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);