이것은 초보자 용 질문 일지 모르지만 새로운 iOS 개발자입니다.navigationController.delegate를 변경하면 액세스가 잘못됩니다.
navigationController에 밀어 넣은보기가 있는데, 세 번째로 밀어 넣은보기라고 가정 해 보겠습니다. 해당보기에서 나는 self.navigationController.delegate = self;
을 설정합니다. 사용자가 이전보기 (현재보기의 팝)로 이동할 때 대소 문자를 처리해야하므로 대리인이 변경되었습니다.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([[viewController class] isEqual:[MainViewController class]]) {
...
}
}
그것은 확인을 작동하지만 다시 버튼을 현재보기를 눌러 탐색을 다시 팝업 때 나쁜 액세스 오류를 받고 있어요 (즉, 첫 번째보기를 밀어로 전환).
그래서 내가 무엇을 놓치고 있습니까? 내비게이션 뒤로 버튼 누르기를 처리하는 올바른 방법은 무엇입니까?
가, 3보기 UINavigationControllerDelegate를 구현 = 자기 self.navigationController.delegate을 할당 다른 사람들은? 그렇다면 모든 뷰에서 어디에서 대리인을 자기에게 설정해야합니까? – deimus
만약 내가 올바르게 당신을 가지고 있다면 뷰에서 nil로 설정되어야한다. 적어도 해냈고 제대로 작동하는 것 같습니다. 확인하십시오. – deimus
물론 각보기 컨트롤러에 대해 설정해야합니다. 확인. 대리자를 nil로 설정해야하는 이유는 포인터 (할당되지 않은 메모리에 대한 포인터)가 "dangling"되지 않도록하기 위해서입니다. EXC_BAD_ACCESS는 대개 할당 취소 된 객체에 메시지를 보내고 내비게이션 컨트롤러의 델리게이트가 해당 오류를 가져 오는 할당 해제 된 객체이므로 발생합니다. – Eugene