0

나는 UIPopoverController을 만들고 내용보기 컨트롤러로 "Editor1"을 설정하고 있습니다. 발신자가 didDismissPopover를 받으면 나는 UIPopoverController을 공개합니다. 나는 사용자가 텍스트를 변경하는 UITextField이 내 편집기에서UIPopoverController 메모리 질문

- (IBAction)open1:(id)sender { 

Editor1 *editor = [[Editor1 alloc] initWithNibName:@"Editor1" bundle:nil]; 
_popoverController = [[UIPopoverController alloc] initWithContentViewController:editor]; 
_popoverController.delegate = self; 
[editor release]; 

[self.popOverController presentPopoverFromRect:self.open1Button.bounds inView:self.open1Button permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; 
} 

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController{ 
    NSLog(@"popoverControllerShouldDismissPopover"); 
    return YES; 
} 

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{ 
    NSLog(@"popvoerControllerDidDismissPopover"); 
    [_popoverController release]; 
} 

내가

- (IBAction)editingDidEnd:(id)sender { 
    NSLog(@"Editing did End"); 
    // SAVE PROCEDURE 
} 

내 질문 순서에 관하여 메시지 "editingDidEnd"을 얻을 때 나는 그것을 저장합니다 이 코드입니다 메소드가 호출됩니다. 순서는 다음과 같습니다

2011-09-07 12:35:21.628 iosTest[1967:b603] popoverControllerShouldDismissPopover 
2011-09-07 12:35:21.629 iosTest[1967:b603] popvoerControllerDidDismissPopover 
2011-09-07 12:35:21.983 iosTest[1967:b603] Editing did End 
2011-09-07 12:35:21.985 iosTest[1967:b603] viewWill Disappear 

당신이 popoverControllerDidDismissPopover이 editingDidEnd: 전에 호출되는 볼 수 있습니다, 그래서 이것은 내 저장 프로 시저를 수행하기 전에 나는 팝 오버를 방출하고있어 의미한다. 이것은 나에게 충돌 문제를 가져올 수있다.

또한 저장 절차에서 사용자에게 확인을 요청해야하는 경우가 있습니다. 나는 이것을 위해 UIAlertView을 사용하고 있습니다.

권장 사항이 있습니까?

답변

0

일반적으로보기는 정상적으로 동작하며 화면이 꺼진 후에도 이벤트를 보내지 않습니다. 좀비를 사용하여 잠재적 인 문제가 있는지 확인할 수 있습니다 (환경 변수 NSZombieEnabled = YES 설정).

크래시가있는 경우 올바른 장소는 -[Editor1 dealloc] (가능하면 -viewDidUnload)입니다. 바로 textField.delegate = nil으로 콜백 수신을 중단해야합니다. 문제가있는 것처럼 보이는 웹보기 및 스크롤보기를 제외하고는 일반적으로 필요하지 않습니다 (VC가 오프 스크린 인 경우에도 스크롤 애니메이션이 계속됩니다).

아마도 UIAlertView를 표시해야하는 경우 NO를 반환하고 (단추를 눌렀을 때 팝업을 닫으면) 아마도 절약을 -popoverControllerShouldDismissPopover:에 만들 수 있습니다.

0

것 같습니다. _popoverController이 인스턴스 속성입니다. 이 경우에는 viewDidUnload parent-controller의 방법으로 해제 할 수 있습니다.

+0

콘텐츠보기 컨트롤러 (editor1) 또는 uipopovercontroller에 대해 viewdidunload를 의미합니까? –

+0

"컨테이너 클래스"는 Editor1의 인스턴스를 만듭니다 - Editor1의 부모 –

0

UITextFieldDelegate 프로토콜을 사용하지 않는 이유는 무엇입니까? 사용법 :

aTextField.delegate = self; 

(...) 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    NSLog(@"Editing did End"); 
    // SAVE PROCEDURE 
} 

자세한 내용은 the documentation을 참조하십시오.