【问题标题】:if condition is met but contents of if statement don't seem to executeif 条件满足但 if 语句的内容似乎没有执行
【发布时间】:2016-11-13 15:04:08
【问题描述】:

我正在尝试执行 if/else 语句来检查数组是否为空。似乎第一个条件已评估但未满足,因此它移至 else 并执行。这是屏幕上的输出(iOS):

您看到的名称在那里是因为执行了 else 语句。但是,还有其他 3 个分数为 0 的用户名没有显示出来。这是相关的条件:

NSArray *keyArray = [yy allKeys];
for(NSString *keyd in keyArray) {
    NSLog(@"yy objectforkey *********: %@", [[yy objectForKey:keyd] debugDescription]);

    if(![yy objectForKey:keyd]){

        NSMutableDictionary* entry = [NSMutableDictionary new];

        NSLog(@"inside yy object for key count 0 *****####***##*#*#*#");
        [tableData addObject:keyd];
        [matchesForUser addObject:@"0"];
        entry[@"username"] = keyd;
        entry[@"matches"] = @"0";
        [entries addObject:entry];
    }

    else {
        NSMutableArray *locs = [[NSMutableArray alloc] initWithArray:[yy objectForKey:keyd]];
        //NSString *outerouter;
        //NSNumber *outeroutermatches = [NSNumber numberWithInt:0];
        for(NSDictionary *outterar in locs) {

            NSMutableDictionary* entry = [NSMutableDictionary new];

            NSLog(@"%@ outtererjar descriptiong ##(#(#(#(#(#(#(#(#(#((#", [outterar description]);

            entry[@"username"] = keyd;

            entry[@"matches"] = [outterar valueForKey:@"groupmatches"];

            if([entries count] > 0) {
                for(int counter = 0; counter < [entries count]; counter++) {
                    if([[[entries objectAtIndex:counter] valueForKey:@"matches"] intValue] < [[entry valueForKey:@"matches"] intValue]) {
                        NSLog(@"GETTING IN IFFFFFF ABOOOVVEEEEE ******8888888*********");

                        //NSMutableDictionary *stud = [[NSMutableDictionary alloc] initWithObjectsAndKeys:keyd, @"username", nil];
                        [matchesForUser addObject:[outterar objectForKey:@"groupmatches"]];
                        [tableData addObject:keyd];

                        NSLog(@"%@ WHAT IS ENTRIES>>>!!!!??!?!?!", [[entries objectAtIndex:counter] valueForKey:@"username"]);
                        if([keyd isEqualToString:[[entries objectAtIndex:counter] valueForKey:@"username"]]) {
                            NSLog(@"GETTING IN IFFFFFF ******8888888*********");
                            [entries removeObjectAtIndex:counter];
                            [entries insertObject:entry atIndex:counter];
                        }
                        else {
                            [entries addObject:entry];
                        }
                    }
                    else {
                        [entries addObject:entry];
                    }
                }
            }
            else {
                [matchesForUser addObject:[outterar objectForKey:@"groupmatches"]];
                [tableData addObject:keyd];
                [entries addObject:entry];
            }
        }
    }
}

_tableViewScoretableData 都是用于填充UIScrollView(s) 的数组。每次找到空对象(它们是数组)时,if 语句中的代码都应该执行。 else 运行,这就是为什么您会看到带有分数的用户名,但是当数组为 null 时似乎没有执行 if。

当我输出我正在检查的对象时,一个空对象如下所示:

yy objectforkey *********: <__NSArrayM 0x170454cd0>(

)

我只需要能够识别其中一个对象何时是这样的。谢谢!

【问题讨论】:

  • 我能解释一下 -1 吗?

标签: ios objective-c arrays null conditional


【解决方案1】:

线

![yy objectForKey:keyd]

检查

字典中是否不存在密钥keyd

当然总是false,因为属性allKeys返回的所有键都保证存在,并且现有键的值不能根据定义为nil

如果要检查数组是否为空,则必须编写

![[yy objectForKey:keyd] count]

PS:考虑使用更具描述性的变量命名而不是yy

【讨论】:

  • 如果您提到不能为NSDictionary 中的键存储nil 值这一事实,则此答案更有意义。
  • 谢谢大家...是的,有时我对变量名感到仓促——我会努力做得更好;)
  • 我认为你是对的..但现在我注意到当我退出应用程序时会出现问题,然后进入应用程序,然后尝试访问记分板....如果我已经在应用程序中并选择它工作正常的记分牌。
  • 我认为这与我的计数器 for 循环有关 - 试图弄清楚
猜你喜欢
  • 2012-11-30
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多