2013-01-09 1 views
-2

&을 NSUserDefaults에서 불러올 때 문제가 발생합니다. 다음 코드를 사용하여 NSUserDefaults에 저장하고 있습니다.NSUserDefaults에서 NSInteger를 검색 할 때의 문제

이것은 올바르게 작동하는 것 같습니다. 내 출력에서 ​​나는 볼 수

"updating 1 as the globalRank in NSUserDefaults" 

을 나는 아래의 코드를 사용하여 전화 번호를 retreive 경우 : 나중에 4978484032 그것보다 더 큰 때문에 오류를 반환하는 또 다른 방법이 INT를 통과

NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults]; 
NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"]; 
int currentGlobalRankInt = currentGlobalRank; 
NSLog(@"Retrieved skip int is: %d as nsinteger is: %d",currentGlobalRankInt, currentGlobalRank); 

I get output: 
"Retrieved skip int is: 4978484032 as nsinteger is: 4978484032" 

을 기대하고있다.

NSUserDefaults에 NSInteger가 포함되어 있지만 그 시점에서도 잘못 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 덕분에, 제임스

답변

0

변경이 코드 ...

NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"]; 
int currentGlobalRankInt = currentGlobalRank; 
NSLog(@"Retrieved skip int is: %d as nsinteger is: %d",currentGlobalRankInt, currentGlobalRank); 

에 ...

NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"]; 
int currentGlobalRankInt = [currentGlobalRank intValue]; 
NSLog(@"Retrieved skip int is: %d as nsinteger is: %@",currentGlobalRankInt, currentGlobalRank); 
1

NSInteger가 기본 유형이 아닌 객체입니다. NSInteger *currentGlobalRank 대신 NSInteger currentGlobalRank이어야합니다. 코드에 int 대신 NSInteger을 사용할 수 있습니다. NSIntegerint으로 변환 할 필요가 없습니다.

iOS에서 NSIntegerint으로, OS X에서는 long으로 정의됩니다.

+0

내가 NSInteger 원시적 몰랐 단지 원시적입니다. 나는 오늘 밤 이것을 시도하고 결과를 업데이트 할 것이다. 고마워, 제임스 – JamesLCQ

+0

@JamesLCQ "나는 몰랐다"- ** 당신은 항상 당신이 사용하고자하는 유형과 클래스의 문서를 읽어야한다. 짐작 하지마. ** –

+0

나는 설명서를 읽었지만 내 마음이 미끄러 져야했다. 당신의 도움을 주셔서 감사합니다. – JamesLCQ

0

NSInteger 또는 int 대신 NSNumber과 같은 래퍼 클래스를 사용하십시오.

그리고 당신은 퍼팅은 * 실수로 ... 에 NSInteger * 당신은 정수를 설정하고 정수에 대한 포인터를 검색하기 위해 노력하고

NSInteger globalRank = 1; 
NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults]; 
[submissionDefaults setInteger: globalRank forKey:@"globalRankIntForLT"]; 
NSLog(@"updating %@ as the globalRank in NSUserDefaults",globalRank); 
[submissionDefaults synchronize]; 



NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults]; 
NSInteger currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"]; 
NSLog(@"Retrieved skip int is: %d as nsinteger is: %d",currentGlobalRank, currentGlobalRank); 
+1

NSInteger는 래퍼 클래스가 아니며 int로 정의됩니다. (컴파일하는 플랫폼에 따라 다름) –

1

을 currentGlobalRank. 변경 :

NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"]; 

에 :

NSInteger currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"]; 

NSInteger에도 불구하고 시작 NS에서 NSObject의 서브 클래스 아니라, 그것은

+0

NSInteger가 원시적 인 것을 몰랐습니다. 나는 오늘 밤 이것을 시도하고 결과를 업데이트 할 것이다. 고마워, James – JamesLCQ

관련 문제