1

ChecklistItemテーブル内のエンティティを列挙して、 priority(NSNumber属性)が1のエンティティが。checklistItemsと多対多の関係にあるかどうかを確認していChecklistます。

この単純なコードでは、最初のNSLogは正常に機能し、いくつかのChecklistItemの優先度が1であると報告します。ただし、2番目の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);
        }
}
4

3 に答える 3

3

eachItem.priorityとの戻り値のポインタを比較しています[NSNumber numberWithInt:1]NSNumberの等式法を使用する必要があります。

于 2011-04-14T16:32:31.667 に答える
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);
        }
}

ありがとう、

于 2011-04-14T16:32:25.933 に答える
1

さて、あなたは次のような値の同等性をチェックする必要があります:

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

ただし、いくつかのベースインスタンスをプールしたと思っていたので、1つがそのうちの1つになると予想していたため、誤ってそのまま機能しないことに少し驚いています。NSNumberただし、この場合に機能したとしても、これに依存することは非常に悪い形式になります。

于 2011-04-14T16:33:45.683 に答える