1

抱歉,如果这是一个初学者问题,但解决方案/正确的语法非常令人困惑。

使用 IOS,我试图找到一种使用另一个外部变量创建实例变量名称的方法。

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

NSCustomItem *item1
NSCustomItem *item2
NSCustomItem *item3

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

我一直在尝试像这样的语法想法

 (NSCustomItem *)item[i] = [[NSCustomItem alloc] init];

但是,这是行不通的。

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

4

3 回答 3

1

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

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

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

然后要访问它们,您可以使用快速枚举遍历数组:

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

或者查看NSArray 类参考NSMutableArray以了解访问(它是 的子类)中的对象的其他方法NSArray

于 2012-11-12T05:03:23.077 回答
0

您不能直接执行此操作。但是你可以使用 anNSMutableDictionary来实现类似的东西,

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]];

要访问item1( item1.property) 中的属性,请使用

[[dict valueForKey:item1] property]
于 2012-11-12T06:46:50.053 回答
0

永远不要使用 UI/NS/MF 之类的前缀命名自定义对象/类。即,前缀有助于识别类所属的框架,用现有框架的前缀命名自己的对象不是一个好习惯,但是从技术上讲,这没问题。而且,在 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 给出的答案很好。

于 2012-11-12T05:07:05.903 回答