2009-08-25 5 views
1

변수 값에 이상한 문제가 있습니다.iphone nslog 데이터가 손상되었습니다

MyAppDelegate *pDelegate = [[UIApplication sharedApplication] delegate]; 
SomeDictionaryData *appData = [pDelegate.theData retain]; 
NSLog(@"my instance var: %@",cardIndex); // outputs "my instance var: 4" 
NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:cardIndex]];; 
// the above line breaks the app 
[currentCard release]; 
[appData release]; 

나는 objc_exception_throw 중단 점에 디버거를 사용하고 있습니다 : 이것은 코드입니다 (이것은 클래스 메소드의 일부입니다). objectAtIndex에 수신 된 입력 값은 13760640으로 표시됩니다. appData의 cards 속성은 NSArray이며 분명히 천만 개 + 항목이 없으므로 범위를 벗어납니다. 나는 더 나은 결과와 함께 (int)cardIndex로 캐스팅을 시도했다. 이상한 것은 다른 클래스에서 비슷한 코드가 잘 동작한다는 것입니다.

이것은 내 응용 프로그램에서 사용하려는 일부 데이터이므로 AppDelegate에서 으로 초기화 된 Model 클래스가 있고 다른 ViewControllers에 의해 액세스됩니다. 이 오류는 다른 ViewController에서 성공적으로 액세스 한 후에 나타납니다 (그 중 하나는 유지/해제됩니다).

도움이 될 것입니다.

답변

0

objectAtIndex: 줄에는 [cardIndex unsignedIntValue]을 사용하십시오.

objectAtIndex:에는 부호없는 정수가 필요하므로 포인터를 지정할 수 없습니다. 예를 들어

:

NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:[cardIndex unsignedIntValue]]]; 

편집 : cardIndexint하지만 어딘가에 선을 따라가 NSNumber 인스턴스로 설정되는 것처럼

그것은 소리. 해킹으로는 [(id)cardIndex unsignedIntValue]을 사용하십시오. 이것이 작동하면 cardIndex에 대해 잘못된 유형을 사용하고 있음을 의미합니다 (NSNumber 여야하며 int이 아님).

+0

감사합니다. "잘못된 수신기 유형 int"경고가 표시됩니다. – mga

+0

(NSUInteger)로 캐스팅을 시도했지만 여전히 경고가 표시됩니다. 그래도 다른 모든 것은 잘 작동합니다 ... 나는 단지 경고를 좋아하지 않습니다. – mga

+0

바로 켜기! NSNumber에 필요한 모든 참조를 변환했습니다. 감사! – mga