2012-12-12 9 views
1

NSNumber에서 허용하는 가장 높은 정수는 무엇입니까? 나는이 포럼의 다른 곳에서 답을 보았고, 왜 내가 여기서 왜 그렇게 혼란스러워하는지.NSNumber 한도는?

int miles = 35000; 
vehicle.mileage = [NSNumber numberWithInt:miles]; 
NSLog(@"int value = %d", miles); 
NSLog(@"mileage = %@", vehicle.mileage); 

출력은 다음과 같습니다

int value = 35000 
mileage = -30536 

여기 끔찍한 쉽게 누락해야하지만이 제대로 작동하지 않는 이유는 누군가가 나에게 설명 할 수 있습니까?

UPDATE : 더보고 후, vehicle.mileage이 35000에 올바르게 설정지고하지만 난 NSLog를 통해이 문제를 표시 할 때 ("%의 @", vehicle.mileage @)가 잘못 출력됩니다. 나는 지금까지 "~ 마술"가치를 찾지 못했다. 왜냐하면 지금까지는 ~ 30,000까지의 가치에 대해 작동하기 때문이다.

+3

'NSNumber * mileage = [NSNumber numberWithInt : miles]'으로'vehicle.mileage = [NSNumber numberWithInt : mile]'을 대체하고 NSLog (@ "mileage = % @", vehicle.mileage)를 변경하면; 'NSLog (@ "mileage = % @", mileage);'예상되는 결과 :'mileage = 35000'을 얻을 것이므로, 문제는'vehicle'의'mileage' 속성에 있다고 생각합니다. 세터가 뭔가 펑키하지 않는지 확인하십시오. 확실히 'NSNumber'유형입니까? – sjs

+0

올바른 것으로 보입니다. – Minthos

+0

네, 확실히 NSNumber 유형입니다 - @property (비 원자력, 보유) NSNumber * mileage; – kschins

답변

3

NSNumber는 랩퍼이므로 랩핑 된 기본 유형이 오버플로가되면 오버플로가됩니다.
numberWithInt을 사용하는 경우 numberWithFloat을 사용하면 허용되는 최대 수는 limits.h에 정의 된 INT_MAX입니다. 허용되는 최대 수는 FLOAT_MAX입니다.
이 경우에는 오버플로가되지 않습니다. INT_MAX가 너무 낮을 것입니다.

0

+numberWithInt:은 부호있는 int로 값을 해석합니다. 마일리지는 결코 부정적이 아니므로 사용을 권해드립니다. [NSNumber numberWithUnsignedInt:]

0

정수 의 정수는 INT_MAX으로 알려져 있지만 35,000은 그 근처에 없습니다. 문제는 그들 중 하나가 그래서,이 조건문으로 가서 로그인 nil

수 있습니다 vehicle 개체 또는 vehicle에있는 mileage 속성이어야합니다

if (!vehicle) { 
NSLog(@"Vehicle is nil"); 
} 
else if (!vehicle.mileage) { 
NSLog(@"Vehicle's mileage is nil"); 
} 

것은 나에게 결과를 알려

+0

둘 중 하나도 nil입니다. 위의 업데이트를 참조하십시오. – kschins

1

개요

의 NSNumber는 NSVA의 서브 클래스 lue는 C 스칼라 (숫자) 유형으로 값을 제공합니다. 이 메소드는 특별히 을 설정하고 값을 부호가 있거나 부호없는 char, short int, int, long int, long long int, float 또는 double 또는 BOOL으로 액세스하는 메소드 세트를 정의합니다. 숫자 객체는 과 함께 생성 된 유형을 반드시 유지하지는 않습니다. 또한 두 개의 NSNumber 객체의 순서를 결정하는 compare : 메소드를 정의합니다.

이렇게 NSNumber은 줄 바꿈만큼 큽니다. 예기치 않은 결과가 나오면 @sjs에 대한 질문에 대한 답을 확인할 수 있습니다.