2010-06-07 5 views
0

appelegate의 전역 배열을 사용중인 데모 용 빠른 수정으로 사용하려고합니다. 이NSMutableArray in appdelegate - EXEC_BAD_ACCESS

.H 파일의 관련 코드는 선언

{
있는 NSMutableArray * trnEntered있다;
}

@property (비 원자, 유지)

하는 .m 파일에 다음 코드를 가지고있는 NSMutableArray * trnEntered을 -

trnEntered = [있는 NSMutableArray의 ALLOC] INIT]을;
NSLog (@ "% @", [trnEntered count]); // null을 인쇄합니다.
[trnEntered addObject : @ "1"];
NSLog (@ "% @", [trnEntered count]); // 나쁜 액세스를 exec합니다.

어디서 잘못 될지 잘 모르겠습니다. 꽤 똑바로 보인다.

미리 감사드립니다.
Teja.

답변

3

은 코드에 문제가 발생한 것 같습니다. 이것은 문제를 일으킬 것입니다. 당신이 사용해야합니다 NSLog(@"%d", [trnEntered count]);

나는 더 많은 유용한 정보가 많이 format specifiers에 대한 자세한 내용을 읽어 것이 좋습니다 것이 좋습니다.

조금 더 많은 정보 : 두 번째 NSlog은 코드 클레임이 메모리 위치 0x00000001에있는 NSObject의 description을 인쇄하려고합니다.

+0

아아, 나는 이런 식으로 알고 있었는데, 나는 이것에 2 시간을 낭비했다는 것을 믿을 수 없다. 감사! –

+0

대단히 환영합니다. 나도 쉬운 문제에 너무 많은 시간을 보냈다 :) –

0

첫 번째 NSLog가 'null'을 인쇄해서는 안되며, 초기화하는 방법에 문제가 있습니다. 대신이 방법을 사용하십시오. NSLog에

NSLog(@"%@",[trnEntered count]); // prints null. 
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access. 

두 통화가 목표 - C 객체로 NSUInteger을 인쇄하려고 :

trnEntered = [[NSMutableArray alloc] initWithCapacity:1]; 
0
trnEntered = [[NSMutableArray alloc] init]; 
NSLog(@"%@",[trnEntered count]); // prints null. 
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access. 

잘못된 포맷터 문자열을 사용하고 있기 때문입니다. 문자열 포인터로 정수를 사용하려고합니다. 물론 세분화 오류 (또는 사과 용어로 EXC_BAD_ACCESS)가 발생합니다. % d를 사용하면 [trnEntered count]가 반환하는 정수를 인쇄 할 수 있습니다.

0

NSLog 기본적으로 ans를 문자열 형식으로 인쇄하므로 정수 값을 인쇄하려면 %d 및 그 값을 사용해야합니다.