Сравнение NSString не работает в Objective-C - PullRequest
1 голос
/ 30 марта 2009

Ниже приведен код Objective C, в котором я пытаюсь сравнить два значения NSString, однако он выдает ошибку времени выполнения. Вот код:

NSDictionary *innerContent=[JSONResponseDict valueForKey:@"JSONRESPONSE"];
NSString *authFlag = [innerContent valueForKey:@"authenticationFlag"];

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

UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:nil
                      message: [NSString stringWithFormat:@"authenticationFlag = %@",authFlag]
                      delegate:self
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil];
[alert show];
[alert release];

// This block is problematic
if ( [authFlag isEqualToString:@"1"]){
    NSLog(@"Logged in");
    self.view = homeView;
} else {
    NSLog(@"Not logged in");
}

Обратите внимание, что NSString authFlag был протестирован как действительно имеющий допустимое строковое значение. Значение authFlag может быть равно «1» или «0» (оно получается из ответа на вызов JSON с использованием json-framework).

Вот ошибка времени выполнения:

[Session started at 2009-03-29 19:21:00 -0700.]
2009-03-29 19:21:11.186 taggle[4144:20b] userEmail=user@domain.com&password=opensesame
2009-03-29 19:21:11.653 taggle[4144:20b] authFlag = 1
2009-03-29 19:21:11.655 taggle[4144:20b] *** -[NSCFBoolean isEqualToString:]:       unrecognized selector sent to instance 0xa089c400
2009-03-29 19:21:11.661 taggle[4144:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFBoolean isEqualToString:]: unrecognized selector sent to instance 0xa089c400'

Ответы [ 2 ]

14 голосов
/ 30 марта 2009

Как показывает журнал ошибок, authFlag - это не NSString, а NSCFBoolean.

Вы можете сделать это:

NSCFBoolean *authFlag = [innerContent valueForKey:@"authenticationFlag"];

if([authFlag boolValue]) {
    NSLog(@"Logged in");
    self.view = homeView;
} else {
    NSLog(@"Not logged in");
}
4 голосов
/ 18 октября 2012

Ваш authFlag - NSNumber, а не NSString.

NSCFBoolean является частным подклассом NSNumber. Он входит в шаблон проектирования кластера класса.

Нет метода с именем isEqualToString: доступен в NSNumber.
Вот модифицированный код.

NSNumber *authFlag = [innerContent valueForKey:@"authenticationFlag"];

if([authFlag boolValue]) {
    NSLog(@"Logged in");
    self.view = homeView;
} else {
    NSLog(@"Not logged in");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...