[英]NSString Compare Not Working in Objective-C
以下是我試圖在兩個NSString值之間進行比較的Objective-C代碼,但是會引發運行時錯誤。 這是代碼:
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-framework對JSON調用的響應獲得的)。
這是運行時錯誤:
[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'
如錯誤日志所示,authFlag不是NSString
,而是NSCFBoolean
。
你可以這樣做:
NSCFBoolean *authFlag = [innerContent valueForKey:@"authenticationFlag"];
if([authFlag boolValue]) {
NSLog(@"Logged in");
self.view = homeView;
} else {
NSLog(@"Not logged in");
}
您的authFlag是NSNumber,而不是NSString。
NSCFBoolean是NSNumber的私有子類。 它屬於類集群設計模式。
NSNumber中沒有名稱為isEqualToString:的方法。
這是修改后的代碼。
NSNumber *authFlag = [innerContent valueForKey:@"authenticationFlag"];
if([authFlag boolValue]) {
NSLog(@"Logged in");
self.view = homeView;
} else {
NSLog(@"Not logged in");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.