isEqualToString给我错误的结果

时间:2012-08-29 19:39:56

标签: objective-c string

这是我的代码:

    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    NSLog(@"Row %i at View: %@",indexPath.row, [delegate.my_condition objectAtIndex:indexPath.row]);
   if ([@"0" isEqualToString:[delegate.my_condition objectAtIndex:indexPath.row]]){
        NSLog(@"Store is closed");
   } else {
       NSLog(@"Store is open");

在日志中我看到:

2012-08-29 22:33:59.434 MyApp[2593:c07] Row 0 at View: 0
2012-08-29 22:33:59.435 MyApp[2593:c07] Store is open
2012-08-29 22:33:59.437 MyApp[2593:c07] Row 1 at View: 0
2012-08-29 22:33:59.438 MyApp[2593:c07] Store is open
2012-08-29 22:33:59.440 MyApp[2593:c07] Row 2 at View: 0
2012-08-29 22:33:59.441 MyApp[2593:c07] Store is open

所以我确实看到该值为0但我没有看到if子句而是else子句。

为什么?

myCondition is NSMutableArray

这是我向NSMutableArray添加项目的方式:

NSString *parsed=[res objectForKey:@"Data"];
    [delegate.my_condition addObject:parsed];

4 个答案:

答案 0 :(得分:3)

这里没有足够的信息来提供明确的答案,但我看到了一些可能性。

  1. 该对象是一个带尾随空格的字符串。 "0"不等于"0 ",但在日志记录输出中看起来相同。
  2. 该对象实际上是NSNumber,其值为0.在日志记录中它仍然看起来相同,但它不是一个相同的对象。尝试检查对象的类。

答案 1 :(得分:0)

您确定delegate.my_condition中的值是字符串吗?看起来他们可能是NSNumber*。当然,NSNumber*永远不会等于NSString*

您可能想尝试类似

的内容
if ([[delegate.my_condition objectAtIndex:indexPath.row] intValue] == 0) {
    NSLog(@"Store is closed");
} // ...

相反,它假设该值是表示数字的NSNumber*NSString*

答案 2 :(得分:0)

您的NSMutableArray是否返回字符串?这可能会发生,因为您返回NSNumber类型而不是字符串。在这种情况下,您可能希望将stringValue放在对象的末尾以将其转换为字符串。

答案 3 :(得分:-1)

尝试翻转条件,如下所示:

if ([[delegate.my_condition objectAtIndex:indexPath.row] isEqualToString:@"0"]) {

NSString *_string = [delegate.my_condition objectAtIndex:indexPath.row];
if ([_string isEqualToString:@"0"]) {

在类似

的字符串上调用函数可能会遇到麻烦