2011-03-24 3 views
5

오늘 두 개의 버그를 추적하면서 같은 솔루션을 사용하여 두 가지 버그를 해결했습니다.NSNumber와 NSInteger를 비교하십시오.

이제 해결책이 생겼으므로 그 뒤에 명확성을 얻기를 바랍니다.

코어 데이터 (정수 16/NSNumber)의 속성과 정수 (ABPropertyID & ABMultiValueIdentifier)를 비교합니다.

버그가이 비교에 있었고 이상하게도 (백그라운드 트레이에서) 응용 프로그램을 종료하고 다시 열고, 비교를 포함한 동일한 프로세스를 실행 한 후에 만 ​​이상하게 보였습니다. 어쨌든 ...

이것은 다시 시작한 후 작동을 중지 무엇 :

if (myNumber.aProperty == [NSNUmber numberWithInt:anInteger]) { /* do stuff here */ }

을 그리고이 지금까지, 완벽하게 작동하는이 개 솔루션은 다음과 같습니다

if ([myNumber.aProperty integerValue] == anInteger) {/* do stuff here */ }

if ([myNumber.aProperty isEqualToNumber:[NSNumber numberWithInt:anInteger]]) { /* do stuff here */ }

나에게는 모두 똑같이 보입니다. 나는 항상 NSNumber를 integerValue로 변환하거나 정수를 NSNumber로 변환합니다.

아이디어가 있으십니까?

답변

11

을 비교하기 위해 ==을 사용하지 마십시오. 대개의 경우 두 개의 서로 다른 객체를 비교하므로 비교는 사실로 평가되지 않습니다. if 조건을 살펴보면 특히 귀하의 재산이 신품 인NSNumber 개체와 비교되고 있음을 확인하십시오.

NSInteger은 특정 값 유형의 코코아 래퍼이므로 NSInteger==과 비교하면 올바르게 작동합니다.

isEqualToNumber:의 구현은 아마도 래핑 된 값 유형을 취하여 비교합니다. 당신이 말했듯이

+1

그건 의미가 있습니다.이상하지만, 내 게시물에서 간략하게 언급 한 한 가지 사실은 처음으로 내 앱을 실행할 때 비교가 실제로 작동한다는 것입니다. 그것은 내 응용 프로그램을 죽인 후에 만 ​​다시 열었다가 예기치 않은 결과를보기 시작한 비교를 통해 응용 프로그램을 실행했습니다. 내 앱이나 코드를 전혀 모르는 상태에서 왜 이것이 발생했는지 추측 할 수 있습니까? – djibouti33

+0

@ djibouti33 : 실마리가 ... (그리고 내가 말하는 것은 이것 또한 예측할 수 없다는 것입니다. :) – BoltClock

2

, 두 솔루션, 당신은 정수를 비교하고 그것은 또한, 더 확대됨에있을 수 있습니다 ... 그것은 IMHO, 더 읽기 나타나는

내가, 처음 선호 ... 작업 NSNumber를 int로 변환 한 후. 두 번째에서

, 당신은 당신이 두 개체를 비교 객체에 int를 변환 ... 은 그래서 당신이 첫 번째 경우에없는 두 번째 메서드 호출, ...의

이 도움

희망 ... :)

1

netWorkingButtonsIndexes 개체를 보유하고 LinkedInint 데이터 유형 수있는 배열이다.

isEqual 방법을 사용하면 개체를 모든 rtype 데이터와 비교할 수 있습니다.

관련 문제