2012-08-13 2 views
0

나는이 코드로 EXC_BAD_ACESS을 얻는 이유를 알아 내려고하고 있습니다. 나는 clu이 없다. 누구든지 날 도와 줄 수 pls.실수를 풀거나 놓기

- (void)loadJsonFile:(NSString*)fileName { 
   NSError *error = nil; 
   NSData *jsonData = [[[NSString alloc] 
                        initWithContentsOfFile:[[NSBundle mainBundle] 
                                                pathForResource:fileName ofType:@"json"] 
                        encoding:NSUTF8StringEncoding error:&error] 
                       dataUsingEncoding:NSUTF8StringEncoding]; 
    
   jsonDic = [[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error] retain]; 
    [jsonData release]; 
} 

나는 "[jsonData release];"라인을 주석하고있는 경우, 모든 기능을 제공합니다. 하지만 왜? jsonData을 할당하고 데이터로 채우고 NSJSONSerialization으로 전달하여 jsonDic을 가져옵니다. 직렬화가 끝나면 jsonData을 릴리스하고 jsonDic을 사용하려고합니다. 그러나 "[jsonData release];"다음에 "EXC_BAD_ACCESS"예외가 발생합니다.

나는 아무 도움도받지 못했습니다.

답변

2

jsonData을 출시했으나 결코 보존하지 않았습니다. 정적 분석기 (Menu "Product" ➞ "Analyze")는이 문제를 보여줍니다. 또한 할당하려는 NSString을 공개하지 않습니다.

이처럼 수행

- (void)loadJsonFile:(NSString*)fileName { 
    NSError *error = nil; 
    NSData *jsonData = [[[[[NSString alloc] 
         initWithContentsOfFile:[[NSBundle mainBundle] 
               pathForResource:fileName ofType:@"json"] 
         encoding:NSUTF8StringEncoding error:&error] autorelease] 
         dataUsingEncoding:NSUTF8StringEncoding] retain]; 

    jsonDic = [[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error] retain]; 
    [jsonData release]; 
} 

당신은 ARC (자동 참조 카운팅)를 사용하여 고려할 수 있습니다. Xcode는 메뉴 "Edit" ➞ "Refactor" ➞ "Convert to Objective-C ARC…"을 사용하여 프로젝트를 거의 완전 자동으로 변환 할 수 있습니다. 수동으로 메모리를 관리해야하는 이유가 몇 가지 있습니다.

+0

Thx 많이 있습니다. 나는 지금 을 깨달았습니다. a) 내가 결코 풀어주지 않는 문자열 객체를 생성 중입니다. b) 소유하지 않은 데이터 객체를 공개합니다. –

+0

어떤 XCode 버전을 사용하고 있습니까? 3.2.5를 사용하고 있는데 ARC가 표시되지 않습니다 ... 모든 메뉴 ... – user574771

+0

@ user574771 ARC는 Xcode 4.2 이상이 필요합니다. –

관련 문제