1

내 테이블의 ChecklistItem 엔티티를 통해 priority (NSNumber 특성)이 1 인 것을 확인합니다. checklistItemsChecklist과 다 대 관계입니다.왜이 간단한 'if'문이 작동하지 않습니까 (빠른 열거 형 내부)?

이 간단한 코드에서 첫 번째 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); 
     } 
} 

답변

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); 
     } 
} 

감사합니다,

+0

이것은 작동하지 않을 것이고, eachItem.priority는 NSNumber – MarkPowell

+0

입니다.하지만 NSNumber has - (int) intValue 메서드를 읽었습니까? 문서에 문제가 있습니까? – Ravin

+0

내 실수는 더 가까이 읽었어야합니다. "intValue"를 놓쳤습니다. – MarkPowell

3

당신은 eachItem.priority[NSNumber numberWithInt:1]의 반환 값의 포인터를 비교하는 것입니다. 당신은 NSNumber의 평등 방법을 사용해야합니다.

1

음,이 같은 가치의 평등 뭔가를 확인해야합니다 그러나

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

, 나는 내가 생각했기 때문에 실수로 작업은 그대로, NSNumber이 풀링하지 않는 종류의 놀랐어요 몇 가지 기본 인스턴스와 나는 그 중 하나가 될 것으로 기대하고 싶습니다. 비록이 경우에 일이 일어난다 고하더라도, 그것은 매우 나쁜 형태 일 것입니다.

관련 문제