Цель C: сравнить элемент массива со строкой - PullRequest
0 голосов
/ 16 февраля 2011

Привет,

Я пытаюсь просто сравнить NSString с NSArray.

Вот мой код:

NSString *username=uname.text;
    NSString *regex=@"^[a-zA-Z0-9-_.]{3,20}$";
    NSArray *matchArray=nil;
    matchArray=[username componentsMatchedByRegex:regex];
    if(matchArray[0] == "asdf"){   //this line causes the problem!
        NSLog(@"matchArray %@",matchArray);
    }

Я получаю ошибку "Недопустимые операнды в двоичный ==".

Как мне сравнить строку?

Большое спасибо заранее,

Ответы [ 3 ]

5 голосов
/ 16 февраля 2011

Вы пытаетесь сравнить NSString со строкой C (char *), что неверно. matchArray - это NSArray, поэтому вы также не можете рассматривать его как массив C, вы должны использовать его метод objectAtIndex: и передать индекс.

Используйте это вместо:

if ([[matchArray objectAtIndex:0] isEqualToString:@"asdf"]) {
    NSLog(@"matchArray %@", matchArray);
}

Обращаясь к вашим комментариям, причина, по которой isEqualToString: не отображается в автозаполнении, заключается в том, что XCode не может догадаться, что matchArray содержит NSString s (он знает только, что он содержит id s, то есть произвольный Objective- С объектов). Если вы действительно хотите быть уверены, вы можете выполнить явное приведение, но это не имеет значения, если вы этого не сделаете:

if ([(NSString *)[matchArray objectAtIndex:0] isEqualToString:@"asdf"]) {
    NSLog(@"matchArray %@", matchArray);
}
1 голос
/ 16 февраля 2011

вы хотите использовать -objectAtIndex для получения элемента массива. НЕ синтаксис доступа к массиву C

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

попробуйте использовать:

[[matchArray objectAtIndex:0] isEqualToString:@"asdf"];

в любом случае строка "asdf" должна быть @ "asdf"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...