2009-10-06 5 views
7

NSManagedObject에서 검색된 콘솔에 정수 값을 인쇄하려고하면 6 또는 8 자리 값 (개체 ID?)이 표시됩니다. 그러나 디버거를 사용하면 '콘솔에 설명 인쇄'가 하나의 숫자 값으로 표시됩니다.NSLog를 사용하여 NSManagedObject에서 NSInteger 값을 인쇄하는 방법

예를 들어, 나는 NSInteger에 객체의 순서를 '할당하고 다음 NSLog 형식 문자열을 사용하여 표시 :

MyProcess *myProcess = [array objectAtIndex:i]; 
NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)myProcess.sequence] intValue]; 
NSLog(@"sequence = %d",myProcess.sequence); 

콘솔 출력은 다음과 같습니다

2009-10-06 16:11:05.871 MyProcess[33185:20b] sequence = 565256 

을하지만'인쇄를 할 때 디버거에서 콘솔 '로 이동하면 값 1이 표시됩니다.

<MyStoryImage: 0x3f59a80> (entity: MyObject; id: 0x3f2d540 <x-coredata://FF21959A- 4B67-4587-A25F-66A7B8139DFA/MyProcess/p2> ; data: { 
sequence = 1; 
<x-coredata://FF21959A-4B67-4587-A25F-66A7B8139DFA/MyProcess/p1>; 
}) 

감사합니다. 코드의 첫 번째 줄에

typedef int NSInteger; 

:

답변

11

NSManagedObject에서 얻을 수있는 것은 NSNumber입니다. 당신이 정말로 NSInteger 필요하면

MyProcess *myProcess = [array objectAtIndex:i]; 
NSLog(@"sequence = %@", myProcess.sequence); 

이 나, : 이 있음을 인쇄 할 쉽게

MyProcess *myProcess = [array objectAtIndex:i]; 
NSLog(@"sequence = %i", [myProcess.sequence integerValue]); 

내가 생각하는 그 코드

NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)myProcess.sequence] intValue]; 

제 (NSInteger) myProcess의이 비트에 .sequence는 실제로 NSNumber의 메모리 주소를 가져옵니다. NSNumber를 NSInteger에 캐스트 할 수 없습니다.

+0

감사합니다. (위의 % @에 대한 Chuck의 설명과 함께)이 둘 모두 내가 잘못하고있는 일과 해결 방법을 알려줍니다. – dfdumaresq

-1

NSInteger 그냥 int이며

NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)sequence] intValue]; 

당신이 방법에 대한 라운드에서 자신에게 순서를 할당한다하고있는 모든. 초기화되지 않았기 때문에 임의의 숫자가 될 수 있습니다.

+0

NSInteger는 항상 INT 아니다. 64 비트 응용 프로그램에서는 길다. –

+0

죄송합니다, 원래 예제는 결함이 있습니다. 나는 시퀀스가 ​​MyProcess의 속성이라는 것을 분명히했다. – dfdumaresq

0

응용 프로그램의 작성 방법에 따라 NSInteger는 32 비트이거나 64 비트 일 수 있습니다. 이 64 비트 값이 있다면 제대로 64 비트 값으로 sequence 취급 있도록, 당신은

NSLog(@"sequence = %qi", sequence) 

을 수행해야합니다. 그러나 32 비트 응용 프로그램에서는 작동하지 않습니다. 내가 아는 한 32 비트 및 64 비트 환경 모두에서 NSInteger를 인쇄 할 수있는 단일 형식 지정자는 없습니다.

1

myProcess.sequence은 NSInteger (스칼라)가 아닌 NSNumber (개체) 인 것 같습니다. 그것은 왜 그것이 객체의 설명에 올바르게 나타나는지를 설명 할 것이지만 명시 적으로 그것을 정수로 인쇄하려고 시도 할 때가 아닙니다.

+0

네, NSNumber (CoreData에 의해 선언 된대로)입니다.NSString 속성을 아무렇게나 인쇄 할 수 있기 때문에 나는 혼란 스러웠다. 그러나 아마도 문자열 포맷터 ("% @")에 의해 수행 된 추가 작업이있을 것이다. 감사! – dfdumaresq

+0

'% @ '지정자는 객체 - 모든 객체를 나타냅니다. 그런 식으로 NSNumber를 인쇄 할 수도 있습니다. 예를 들어, 'NSLog (@ "% @, % @, % @!", [NSNumber numberWithInt : 1], [NSNumber numberWithInt : 2], [NSNumber numberWithInt : 3])는'1, 2, 3! ". 그것은 객체의'description' 메소드를 호출함으로써 작동합니다. '% d '지정자는 int를위한 것입니다. – Chuck

+0

감사합니다. – dfdumaresq

-1

이 시도 :

NSLog(@"sequence = %li",(unsigned long)myProcess.sequence); 
+2

몇 가지 설명으로 답변을 개선하십시오. 다른 답변과 비교해보십시오. – SBH

관련 문제