变量名称有问题

时间:2012-11-12 04:49:40

标签: ios instance-variables

如果这是一个初学者问题,请道歉,但解决方法/正确的语法非常混乱。

使用IOS,我正在尝试使用另一个外部变量来创建实例变量名称。

例如,我创建了自定义类(例如,NSCustomItem),现在我想使用循环中的例程初始化多个单独的实例,结果如下:

NSCustomItem *item1
NSCustomItem *item2
NSCustomItem *item3

我正在使用循环来生成多个对象。但是,在循环中,我似乎无法找到使用标记或下标或命名字符串公式来创建对象名称的方法:

我一直在尝试像

这样的语法创意
 (NSCustomItem *)item[i] = [[NSCustomItem alloc] init];

然而,这不起作用。

有人可以协助或提供信息吗?赞赏。

3 个答案:

答案 0 :(得分:1)

创建项目并将每个项目添加到NSMutableArray,如下所示:

NSMutableArray *items = [[NSMutableArray alloc] init];

// then within your loop:
{
    [items addObject:[[NSCustomItem alloc] init]];
}

然后,要访问它们,您可以使用fast enumeration迭代数组:

for (NSCustomItem *item in items) {
    // do something with item
}

或者查看NSArray class reference以了解访问NSMutableArrayNSArray的子类)中对象的其他方法。

答案 1 :(得分:0)

永远不要使用类似UI / NS / MF..i.e的前缀命名自定义对象/类。前缀有助于识别类所属的框架,使用现有框架的前缀命名自己的对象不是一个好的做法,但从技术上讲这是可以的。并且,在一个iIOS应用程序中你总是可以使用C语法,你使用的语法不是一个正确的C方式来声明一个数组,如果想要坚持使用C syantax你可以使用类似这样的东西 -

CustomClass *aTemp[2];

//May use a for loop to populate the Array Elements
aTemp[0] = [[CustomClass alloc]init];
aTemp[1] = [[CustomClass alloc]init];    ....

CustomClass *aTemp[]= {[[CustomClass alloc]init],[[CustomClass alloc] init]};

修改

CustomClass *aTemp[3];   

    for(int i=0;i<=2;i++){ 
     CustomClass *aCustomClass = [[CustomClass alloc]init]   

     // Changes/Customizations in the aCustomClass object 

      aTemp[i]= aCustomClass;
    }

同时确保CustomClass中的一切正常。

如果您想使用Objective C API编写,@ smileyborg给出的答案是好的。

答案 2 :(得分:0)

你不能直接这样做。但您可以使用NSMutableDictionary来实现与

类似的功能
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

然后,每次创建对象时,将其添加到字典中:

for (int i = 0; i < count; i++) {
  [dict setObject:[[NSCustomItem alloc] init] 
           forKey:[NSString stringWithFormat:@"item%d", i]];//dynamically creates NSCustomItem objects with names item1, item2 etc.. till item'count'
}

现在,当你想使用它时,只需使用,

[dict valueForKey:item1];//equivalent to item1

[dict valueForKey:[NSString stringWithFormat:@"item%d", i]];

要访问item1item1.property)中的媒体资源,请使用

[[dict valueForKey:item1] property]