2011-01-03 4 views
0

저는 맵킷과 주석으로 작업하고, 빌드하고 잘 실행 한 후, 로드시 응용 프로그램이 충돌하면서 XCODE에 익숙합니다. 나는 디버거를 돌렸다. 문제 : 프로그램 수신 신호 : "EXC_BAD_ACCESS". 빌드 및 실행 괜찮아요

가 브레이크 포인트에서 1 정지 'viewForAnnotation :지도보기를 - 라인 951'몇 히트 수,

프로그램이 신호를받은 후

계속 : "EXC_BAD_ACCESS"를.

alloc 또는 출시 또는 무언가와 관련하여 무수한 솔루션을 읽었지만 문제가 내 코드에 어디에 있는지 잘 모릅니다.

EDIT : PROBLEM SOLVED.

+0

디버거가 부착 된 상태에서 실행되도록하면 (디버그 설정뿐만 아니라) 문제가되는 행에서 즉시 중지됩니다. 여기에 어떤 줄이 있는지 알면 도움이 될 것입니까? (줄 951?) – Eiko

+2

사실, 코드가 끔찍하게 복제됩니다 ... 컬렉션에 모든 것을 넣고 반복을 사용하면 쓰기와 읽기가 훨씬 쉬워집니다. 정말 가치가 있어요! :-) – Eiko

+0

MKUserLocation.class는 [MKUserLocation class] 여야합니다. – Eiko

답변

2

질문에 대한 직접적인 대답은 아니지만 긴 "else if"코드를 바꾸려면 switch 문을 사용하는 것이 좋습니다. 코드가 훨씬 깨끗해 보이고 컴파일러가 최적화를 수행 할 수 있습니다.

http://en.wikipedia.org/wiki/Switch_statement

편집; 다른 의견 (에이코)을 살펴본 후에이 전체 코드를 제거하고 컬렉션으로 대체하기를 원한다는 데 동의해야합니다. 코드에 너무 많은 중복이 있습니다.

+1

아니요, 실제로 그는 루프를 사용해야합니다. – Eiko

+0

나는 어디서부터 시작해야할지 모르겠다. 나는 아주 새로운데, 나는 반 시간 만에 무엇을보고 있는지 모른다. 유니 프로젝트에 대해이 작업을 완료하려고합니다. – Jon

1

심각하게지나 가기위한 코드.

다음은 이러한 오류를 파악하는 방법입니다.

a) XCode의 실행 메뉴에서 "Objective-C 예외에서 중지"를 사용합니다. 이렇게하면 오류가 발생한 위치에 가깝게됩니다. 그냥 스택을 보면 그림을 그릴 수 있습니다.

b) 도움이되지 않는다면 NSZombie 경로를 사용해 본 적이 없지만 사용해 본 적이 없습니다. http://www.cocoadev.com/index.pl?DebuggingAutorelease. 나는 주로 코드를 검토함으로써 대부분 파악합니다.

희망이 도움이됩니다.

+1

아직 사용을 시작하지 않았다면 디버거 Shift-Cmd-Y (실행 메뉴에서)를 사용하십시오. – Sudhir

+0

나를 귀찮게하는 것은 전에 완벽하게 작동 했었지만 몇 가지 특수 효과를 추가하고 일부 특수 효과 유형을 추가하기로 결정했습니다. 이제이 오류가 발생합니다. 오류는 - (MainViewAnnotationView *)에서 멈 춥니 다. mapView : (MKMapView *) mapView viewForAnnotation : (id ) annotation – Jon

+0

너무 많은 훌륭한 코드를 표시하는 것이 좋습니다. – Jon

3

크래시가있는 경우 백 트레이스가 있습니다. 그것을 게시하십시오.

1

mapView:viewForAnnotation은 plists 또는 모음을 사용하지 않고도 훨씬 더 짧을 수 있습니다. 재사용 식별자는 특정 유형의 주석을 제거하거나 비싸지 만 동일한 설치 작업을하는 주석을 제거하는 데 유용합니다. 모든 주석을 동일한 방식으로 초기화하므로 모든 재사용 식별자를 문제없이 사용할 수 있습니다. 따라서 함수는 다음과 같이 쓰여질 수 있습니다 :

+0

매우 자세한 예제 감사합니다. EXC 나쁜 액세스 오류가 계속 발생하지만 감사합니다. – Jon

+0

디버거를 조금 읽어야 할 것 같아서 더 이상 도움이 필요하기 전에 오류에 대한 자세한 정보를 제공 할 수 있습니다. –

+0

- [MapViewController tableView : cellforRowAtIndexPath :] CellIdentifier가 일 때 중지되며 주석 변수가 범위를 벗어났다 고합니다? EXC_BAD_ACCESS 오류에서 0x023dc668 <+0044> movzbl (% esi, % ecx, 1), % eax – Jon

관련 문제