Как проверить, является ли строка в NSMutableArray isEqualToString X? - PullRequest
2 голосов
/ 14 июля 2011

Извините, если это просто, но я не могу обдумать это.У меня есть массив, и я хотел бы просмотреть каждый объект в нем и посмотреть, является ли онEqualToString: @ "нечто".Если вы попробуете это, но это приведет к сбою:

    for (int i = 0; i < ([myNSMutableArray count]); i++) {

    NSLog(@"i = %i", i);

    if ([[myNSMutableArray objectAtIndex:i] isEqualToString:@"something"]) {
        ...
    } else {
        ...
    }


}

Я получу:

    2011-07-14 13:38:40.983 MNs[21416:207] i = 0
2011-07-14 13:38:40.985 MNs[21416:207] -[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x4c976f0
2011-07-14 13:38:40.987 MNs[21416:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x4c976f0'

Любая помощь будет очень признательна.Заранее спасибо!

РЕДАКТИРОВАТЬ:

Извините, я забыл.Вот как я создал массив:

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

    for (int x = 0; x < 30; x++) {
        [myNSMutableArray addObject:@""];
        [myNSMutableArray addObject:@"something"];
        [myNSMutableArray addObject:@""];
    }

EDIT2:

Извините, проблема была в том, что я пытался скопировать изменяемый массив ... поэтому все ваши ответы верны,Мне просто нужно выбрать один сейчас, я думаю.

Ответы [ 5 ]

6 голосов
/ 14 июля 2011

Попробуйте,

for (int i = 0; i < ([myNSMutableArray count]); i++) {

    NSLog(@"i = %i", i);

NSString *stringToCheck = (NSString *)[myNSMutableArray objectAtIndex:i];

    if ([stringToCheck isEqualToString:@"something"]) {
        ...
    } else {
        ...
    }


}
2 голосов
/ 14 июля 2011

Из сообщения об ошибке вы видите, что проблема заключается в том, как вы заполняете myNSMutableArray.Фактически,

 [myNSMutableArray objectAtIndex:i]

возвращает __NSArrayM вместо NSString, следовательно, вы получаете ошибку.

Не могли бы вы объяснить, какие объекты вы добавляете в NSArray?

1 голос
/ 14 июля 2011

Попробуйте

if ([[[myNSMutableArray objectAtIndex:i] stringValue] 
                                         isEqualToString:@"something"])

потому что элементы в массиве имеют тип ID. Вам нужно привести к NSString!

И убедитесь, что myNSMutableArray создан правильно и не находится в автоматическом выпуске!

Alloc + init делает массив в ручном освобождении, вместо этого [NSMutableArray array] в автоматическом выпуске.

Надеюсь, это поможет.

0 голосов
/ 14 июля 2011

попробуйте вот так ..

NSMutableArray * myNSMutableArray = [[NSMutableArray alloc] initWithObjects: @ "1", @ "2", nil];

for (int i = 0; i < ([myNSMutableArray count]); i++) {


    if ([[myNSMutableArray objectAtIndex:i] isEqualToString:@"1"]) 
    {
        NSLog(@"Hello 1");
    } else
    {
    }


}
0 голосов
/ 14 июля 2011

Если у вас есть строки, попробуйте привести их в действие, прежде чем пытаться сравнить:

if ([(NSString*)[myNSMutableArray objectAtIndex:i] isEqualToString:@"something"]) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...