你如何通过Obj-C中的数组进行枚举?

时间:2011-02-19 12:07:09

标签: objective-c nsmutablearray enumeration

我有一个数组,里面有几个对象(所有不同的类)。但是由于某种原因,使用枚举不起作用。

    NSString *arrayString;
    NSURL *arrayUrl;
    NSProcessInfo *arrayPr;
    NSDictionary *arrayDictionary;
    NSMutableString *arrayMString;

    NSMutableArray *objectArray = [NSMutableArray arrayWithObjects:arrayString,arrayUrl,arrayPr,arrayDictionary,arrayMString,nil];

    for( NSString *item in objectArray ){
        NSLog(@"Class name is: %@", [item className]);
    }

我认为这可能与如何将对象添加到数组有关,但我是Objective-c的新手并且不确定。

3 个答案:

答案 0 :(得分:1)

你实际上并没有填充数组。

NSString *arrayString;

声明一个类型为NSString的变量arrayString。它没有被初始化(所以它在使用变量时应该崩溃 - 但在某些构建设置下可能为0)。

所以,分配一个变量:

NSString *arrayString = [NSString stringWithFormat:@"sksjdhf %f\n", 3.3];

arrayWithObjects添加(va list)参数中的对象,直到遇到nil / null / 0.

在使用它们之前,必须正确设置其余的变量/参数。

这应该像你期望的那样工作:

NSString * str = @"a string";
NSMutableArray *objectArray = [NSMutableArray arrayWithObjects:str, nil];

for (NSObject * item in objectArray) {
    NSLog(@"Class name is: %@", [item className]);
}

答案 1 :(得分:0)

在for循环中,使用id数据类型。 id数据类型是一种通用数据类型,可用于存储对任何对象的引用。

例如:

    for ( id item in objectArray ) {
          NSLog(@"Class name is: %@", [item className]);
    }

答案 2 :(得分:0)

是的,你就是这样做的。如果遇到问题,则不在枚举语法本身中。