为什么这个简单的'if'语句不能工作(在快速枚举中)?

时间:2011-04-14 16:27:12

标签: iphone cocoa-touch core-data if-statement fast-enumeration

我正在通过表格中的ChecklistItem个实体进行枚举,以查看哪些实体的priority(NSNumber属性)为1. checklistItems与{Checklist处于多对多关系1}}。

在这个简单的代码中,第一个NSLog工作正常,并报告我的几个ChecklistItem的优先级为1.但第二个NSLog永远不会被调用。为什么是这样?我认为我正在构建错误的“if”语句,但我不知道如何。

for (ChecklistItem *eachItem in checklist.checklistItems){
    NSLog(@"Going through loop. Item %@ has priority %@.", eachItem.name, eachItem.priority);

    if (eachItem.priority == [NSNumber numberWithInt:1]) {
        NSLog(@"Item %@ has priority 1", eachItem.name);
        }
}

3 个答案:

答案 0 :(得分:3)

您正在比较eachItem.priority[NSNumber numberWithInt:1]的返回值的指针。你应该使用NSNumber的平等方法。

答案 1 :(得分:2)

您无法像上面那样比较对象。使用以下代码。

for (ChecklistItem *eachItem in checklist.checklistItems){
    NSLog(@"Going through loop. Item %@ has priority %@.", eachItem.name, eachItem.priority);

    if ([eachItem.priority intValue]== 1) {
        NSLog(@"Item %@ has priority 1", eachItem.name);
        }
}

谢谢,

答案 2 :(得分:1)

好吧,你应该检查这样的值相等:

if ( [eachItem.priority intValue] == 1 ) { ... }

然而,我有点惊讶它没有意外地工作,因为我认为NSNumber汇集了几个基本实例,我希望1是一个他们然而,依靠这将是非常糟糕的形式,即使它恰好在这种情况下起作用。