2009-11-09 6 views
1

내 시나리오는 다음과 같습니다. iPhone mapkit을 사용하여 위치 찾기를 구축 중입니다. 저장소의 위치 (이름, 주소 등)에 대한 정보를 보유 할 응용 프로그램 대리자에 저장된 배열이 있습니다. 특정 버튼을 누르면 텍스트 필드와 사용자 입력을 조회하는 버튼으로보기가 슬라이드되고 필요한 모든 정보가 반환됩니다.NSMutableArray removeAllObjects 문제

이 모든 것이 제대로 작동하고 점들이 맵에 표시됩니다. 그러나 두 번째로 검색을 시도하면 응용 프로그램이 충돌합니다. 나는 XML 파서가 시작될 때 배열의 모든 개체를 제거하기 위해 노력하고 ...

- (void)parserDidStartDocument:(NSXMLParser *)parser { 
    [dataTempForSearch removeAllObjects]; 
} 

및 디버거가 단순히 이유에 진짜 설명과 함께 메서드 호출에 화살표를두고

이런 상황에 처한 사람이 있습니까? 왜 이것이 행동이 수행 된 두 번째 시간에만 일어날 수 있는지에 대한 어떤 생각?

+0

이 줄을 주석 처리하면 충돌이 발생합니까? 당신은 각 객체에서 removeObject에 for 루프를 작성한다면 어떨까요? 디버깅 도구로 사용해보십시오. – mahboudz

답변

1

한 줄의 코드만으로는 알기 어렵습니다. 아마도 메모리 관리 문제 일 수도 있지만 구체적으로 말할 수는 없습니다.

어둠 속에서 촬영 : 검색을 할 때마다 파서를 삭제하고 다시 만듭니다. 데이터를 App Delegate에 전달한 직후에 dataTempForSearch를 지우 겠지만 다른 검색을 수행 할 때가 아닙니다.

+0

네가 맞아, 그것은 메모리 관리 문제였다. 매번 두 번째보기에서 dataTempForSearch를 릴리스 했으므로 다음 번에 액세스 할 때 릴리스되고 컴파일러는 어디에서 봐야할지 몰랐습니다 ... 눈을 뜨게 해줘서 고마워! – rson

1

MapKit에는 몇 가지 매우 불쾌한 문제가 있습니다. 디버거가 그 라인에 화살표를두고 이상한 행동을하게되면, 당신에게 제공되는 호출 스택을 살펴보십시오. (보통 왼쪽의 디버그 모드에서 볼 수 있습니다). MapKit과 관련이 있다고 확신합니다.