2010-06-16 11 views
0

nsdictionary ivar에서 objectForKey :를 호출하려고하는데 EXC_BAD_ACCESS 오류가 발생합니다. nsdictionary는 JSON 프레임 워크를 사용하여 생성 된 다음 유지됩니다. 내가 처음 사용할 때 (같은 루프를 실행 한 직후) 완벽하게 작동하지만 나중에 액세스하려고하면 아무 것도 작동하지 않습니다.EXC_BAD_ACCESS를 일으키는 NSDictionary

if (resultsDic == nil) { 
    NSLog(@"results dic is nil."); 
} 
if ([resultsDic respondsToSelector:@selector(objectForKey:)]) { 
    NSLog(@"resultsDic should respond to objectForKey:"); 
} 

사전이 전무 적이 없지만, 항상 respondsToSelector에 충돌 : 내가 잘못이 무엇인지 알아 내려고 시도하는이 코드를하고있는 중이 야. 어떤 아이디어?

또한 : 사전이 상호 작용 가져옵니다 이들은 위 이외의 다른 장소 : 일도 후

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [connection release]; 

    //get the data in a usable form 
    NSString *jsonString = [[NSString alloc] initWithData:downloadedData encoding:NSUTF8StringEncoding]; 
    resultsDic = [jsonString JSONValue]; 

    [self processResults]; 

    NSLog(@"Success. Received %d bytes of data",[downloadedData length]); 
    [downloadedData release]; 
    [jsonString release]; 
} 



- (void)processResults 
{ 
     NSArray *resultsArr = [resultsDic objectForKey:@"results"]; 
       CLLocationCoordinate2D coordinate = [self coordinateFromResult:[resultsArr objectAtIndex:0]]; 
     NSLog(@"lat: %f lng: %f", coordinate.latitude, coordinate.longitude); 
} 

- (void)dealloc { 
    [resultsDic release]; 
    [super dealloc]; 
} 
+0

디버거를 사용하고'resultsDic'에 여전히 유효한 참조가 포함되어 있는지/여전히 사전인지 확인 했습니까? –

+0

그것은 0 키/값 쌍이 있다고합니다. 그러나 어떻게 사라질 수 있었는가, 사전은 유지되어야한다고 생각합니까? – aks

답변

0

개체가 해제됩니다, 카운트가 0으로 감소 유지합니다. 이 값을 nil로 설정하는 것과 같지 않습니다. 그것은 제로가되지 않습니다. 해제 된 객체에 메시지를 보내면 EXC_BAD_ACCESS 오류가 발생합니다. 일부 코드를 작성하여 사용하는 곳에 게시하면 디버그를 도와 줄 수도 있습니다. 처음에는 두 번 유지하십시오. 그것은 우아한 해결책이지만 빠른 수정으로 작동 할 수도 있습니다.

+0

아, 설명해 주셔서 감사합니다. 그것이 만들어지면 권리를 추가하면 작동하게되고, 이제는 누출을 확인해야합니다. 좀비 도구는 나를 위해 회색으로 표시되어 있지만 실행중인 것일 수도 있습니다. – aks

+0

누설 도구에 따르면 사전은 누출되지 않습니다. 이것은 어쨌든 그것을 유지해야한다는 것을 의미하며 추가 한 유지가 필요합니까? – aks

+0

가능성이 큽니다. 모두가 적절한 규칙을 따르고 있다면, 돌아온 사전은 자동으로 등록됩니다 (즉, 즉시 작업 할 수 있었지만 나중에 할당 취소되었습니다). 따라서 보관하고 싶다면 보관하십시오. – bobDevil

0

고전적인 좀비처럼 들립니다. 환경 변수 NSZombieEnabledYES으로 설정하여 다시 실행하십시오 (또는 Instruments.app에서 좀비 도구를 사용하십시오). 그것은 당신에게 무슨 일이 일어나고 있는지에 대해 훨씬 더 많은 정보를 줄 것입니다.

+0

덕분에, 그 도구에 대해 알지 못했습니다 (꽤 큰 멍청한 놈) – aks