10

나는 그래서 내 TableViewController의 didSelectRowAtIndexPath 방법 내에서 내 탐색 컨트롤러의 스택에보기 컨트롤러를 밀어 해요 :왜이 과도한 출시입니까? UINavigationController가/jQuery과

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
MyObject *myO = (MyObject *)[appDelegate.myOs objectAtIndex:indexPath.row]; 
myViewController.amount = myO.amount; 
[self.navigationController pushViewController:myViewController animated:YES]; 
[myViewController release]; 

내가 오류가 돌아 오면 마지막 줄이 다음 응용 프로그램 충돌의 주석을 해제하는 경우 :

-[CALayer release]: message sent to deallocated instance 0xd4f860 

더 자세히 살펴보면 MyViewController의 dealoc 메소드 내에서 [super dealoc]에 대한 호출로 충돌을 더 좁힐 수 있음을 알 수 있습니다. "[super dealoc]"주석 처리를 해제하면 충돌이 발생하지 않습니다.

이 문제를 더욱 좁혀 가고 있습니다. "super"는 UIViewController 클래스가 될 것이고 나는 그 dealoc 메소드를 더 이상 조사 할 수 없다 ... 나는 할 수 있을까? 어쩌면 정확히 0xd4f860이 가리키고있는 것을 볼 수있는 방법이 있지만 어떻게 알지 못하겠습니까? 어떤 아이디어?

+0

어디서든지 myViewController.view를 출시 하시겠습니까? –

답변

4

잘못된 장소를보고 있습니다. 문제는 myViewController가 너무 많이 릴리스 (또는 자동 렌더링)되고 있다는 것입니다.

게시 한 코드가 정확한 것처럼 보이므로 MyViewController의 코드를보고 자체적으로 출시되는지 여부를 확인하거나 다른 방법으로 출시 될 수 있습니다.

또한 해제 방법을 재정의하고 중단 점을 설정하여 해당 범위를 좁힐 수 있는지 확인할 수 있습니다. 예 :

- (void)release { 
    [super release]; //Set breakpoint here 
} 
+0

방금 ​​릴리스 메서드를 재정의하고 거기에 휴식을 시도했다 ... 그것은 getSelectRowAtIndexPath에 의해 트리거 된 가정에 (에) 21 번 호출하고 다음 또 다른 8 또는 그래서보기 밖으로 백업 할 때 호출됩니다. 내가 무엇을 찾고 있어야하는지 확신 할 수 없다. 프레임 워크 콜이 많다. ("Purple"?!?, etc. ...) – Meltemi

+0

mythogen은 좋은 지적을 불러 일으킨다. (즉, 이미 사라진 레이어를 할당 해제하려고 할 때 예외가 발생합니다.) –

+0

문제점을 발견했습니다. 적어도 그것은 더 이상 충돌하지 않습니다. MyVC의 뷰의 하위 뷰인 UIView 하위 클래스의 인스턴스가 2 개 있었지만 MyVC에 대한 통신을 위해 필요한 속성도있었습니다. 아이러니하게도, 여기에 의견을 적어 놓으십시오. (예 : . 왜 VC를 유지하기를 원하지 않는지 이해가됩니다. 그래서 유지 사이클을 끝내지 않을 것입니다. 그러나 충돌로 인해 충돌이 발생합니다. 분명히, 아직도 뭔가를 오해하고 있습니다. ... – Meltemi

관련 문제