2011-01-09 5 views
2

이 코드를 실행 중입니다.NSString to NSNumber : 내가 여기서 뭘 잘못하고 있니?

NSLog(@"Converting line number %@ to int...",currentValue); 

NSNumber * currentNumber = [NSNumber numberWithInt:[currentValue integerValue]]; 

NSLog(@"Converted integer %d",currentNumber); 

다음과 같이 출력됩니다.

Converting line number 211 to int... 
Converted integer 62549488 

여기서 잘못된 것은 무엇입니까? 이 경우 currentValue는 값이 211 인 NSMutableString입니다.

답변

11

"currentNumber"는 % d와 (과) 인쇄하려는 객체입니다.

NSLog(@"Converted integer %d", [currentNumber intValue]); 
+2

당신의 NSLog 라인을 변경하지 아니면'NSLog를 할 수있는,' – donkim

+0

을 아주 드물게 iOS 또는 맥 OS X의 코코아 당신이 일을 할 원시 타입들. 모든 것이 대상이며, 모든 것이 게터와 세터를가집니다. NSNumber는 무엇에서 빠져 나오고 싶은지 (또는 무엇을 넣어 주 었는지)에 따라 float, int, double 등으로 캐스팅 될 수 있습니다. – ExitToShell

+2

ExitToShell, 그건 사실이 아닙니다. 매우 드물게 문제가 엄격히 요구하지 않는 한 객체의 기본 유형을 포기하거나 객체로 변환하면 문제를 훨씬 더 깔끔하고 쉽게 해결할 수 있습니다. 기본 유형은 훨씬 빠르며 가능한 경우 일반적으로 사용해야합니다. –

5

귀하의 질문에 이미 답변되었지만 귀하의 코드에 다른 문제가 있습니다.

이름에 intinteger이있는 코코아 방법에는 차이가 있습니다. INT numberWithInt 또는 INT들과 intValue 거래와

것들은.

정수 같은 와 거래 numberWithInteger이나 integerValue NSInteger의를 가진 사람.

이것은 32/64 비트 프로그램을 프로그래밍 할 때 오류 및 불일치의 원인이 될 수 있습니다.

알고 있어야하며 일관된 것.

2

NSNumber는 NSObject 클래스입니다. 정수가 아닙니다. % d 대신 "% @"를 사용할 수 있습니다. (currentNumber "변환 된 정수 %의 @"@) 다음과 같이

당신은

NSLog(@"Converted integer %@",currentNumber); 
관련 문제