2011-07-05 8 views
2

이 사이트에서 질문하는 것은 이번이 처음입니다. 아마추어 개발자로서이 사이트에서 내 질문에 대한 답변을 찾았지만 현재 문제는 찾을 수 없습니다. 내 아이 패드 응용 프로그램에서iOS 프로그래밍 : 'super dealloc'이 (가) 앱을 닫습니다.

은 내가 rootView에서 새 UIViewController에 전화 :

DisplayTheMapViewController_iPad *root = [[DisplayTheMapViewController_iPad alloc] init]; 
displayTheMapViewController=root; 
[[self navigationController] pushViewController:displayTheMapViewController animated:YES]; 
[root release]; 

내가 기본보기에이보기에서 돌아가 응용 프로그램이 충돌 (이 분 소요 정도 한 다음 모든 것을까지 정상이지만 항상 발생합니다), 자동 해제 풀 오류가 있습니다.

내가 [루트 릴리스] 주석을 달았을 때 응용 프로그램은 계속 살아 있지만 다른 문제가 있습니다. 뷰에 두 번째로 방문하면 (처음이 아니라!) 뷰에 팝업을 삽입하는 메서드 호출이있을 때, 앱이 다운되고 다음 오류가 발생합니다.

'창이없는보기에서 팝업을 표시 할 수 없습니다.'

내가 잘못해야합니다. 사전에 조언 해 주셔서 감사합니다.

답변

0

DisplayTheMapViewController_iPad 클래스의 맨 아래에서 할당 된 객체를 놓치는 것을 잊어 버렸는지 확인하십시오.

1

이 라인은 약간 당혹 :

displayTheMapViewController=root; 

을 내가 displayTheMapViewController 인스턴스 변수입니다 같은데요? 그렇다면 루트를 지정하고 있지만 루트를 유지하지는 않습니다. 해당 컨트롤러가 탐색 스택에서 튀어 나왔을 때 탐색 컨트롤러가이를 해제하고 나머지 컨트롤러가 보유하지 않으므로 탐색 컨트롤러가 할당을 해제합니다. displayTheMapViewController 그러면 잘못된 개체를 가리 킵니다. 아마 당신은 말을 의미 다음 displayTheMapViewController특성이 그 내용을 유지하기 위해 설정되어있는 경우

self.displayTheMapViewController=root; 

, 그 위에 매달려 포인터 문제를 방지 것입니다.

+0

고마워요, 그 속임수를했습니다. :) – Jerubus

0

문제를 완전히 진단 할 수있는 코드를 게시하지는 않지만 행을 확인하는 것이 좋습니다 : displayTheMapViewController = root;. root을 유지하지 않으므로보기 컨트롤러가 탐색 컨트롤러에서 제거 된 후에 displayTheMapViewController이 매달려 남습니다.

루트를 해제하고 뷰를 다시 입력 할 때 어떤 일이 발생하는지에 관해서는 두 번째 인스턴스가 생기면 DisplayTheMapViewController_iPad의 내부와 관련된 것으로 판단됩니다.

+0

고마워. 큰 충고! – Jerubus

관련 문제