Как вы перечисляете через массив в Obj-C? - PullRequest
2 голосов
/ 19 февраля 2011

У меня есть массив, в котором есть несколько объектов (все разных классов). Но использование перечисления по какой-то причине не работает.

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

Я думаю, что это может быть связано с тем, как объекты были добавлены в массив, но я новичок в target-c и не уверен.

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

вы на самом деле не заполняете массив.

NSString *arrayString;

объявляет переменную arrayString типа NSString. он не инициализирован (поэтому он заслуживает сбоя при использовании переменной - но может иметь значение 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]);
}
0 голосов
/ 21 февраля 2011

Да, вот как ты это делаешь. Если у вас возникли проблемы, это не входит в синтаксис самого перечисления.

0 голосов
/ 21 февраля 2011

В цикле for используйте тип данных id. Тип данных id - это тип данных общего назначения, который можно использовать для хранения ссылки на любой объект.

Например:

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