두 버튼이있는 UIAlertView
이 있습니다. 그러나 나는 clickedButtonAtIndex
이벤트를 가져올 수 없습니다. 문제는 - (void)dealloc
메서드가 너무 일찍 호출되어 위임자를 nil로 설정했기 때문입니다. 이로 인해 경고보기 버튼 클릭을 처리 할 수 없었습니다. 이것에 대한 이유는 무엇 일 수 있습니다.Dealloc 메서드가 조기에 호출되는 중
편집 : 내 코드에는 두 가지 방향이 있습니다. 하나의 흐름 방향에, 그것의 일 벌금. dealloc 메서드가 올바른 방법으로 호출되고 있습니다. 초기에 뷰가 해제 될 때 아무런 문제가 없습니다.
그러나 두 번째 흐름에서는이 문제가 발생합니다. 현재로서는 뷰가 중간에 해제되는 경우 UIAlertView 대리자를 [self retain]
으로 설정해야한다는 것을 이해합니다. 그러나보기가 해제되었거나 계속 유지되는지 여부를 확인하여 첫 번째 흐름을 방해하지 않는 방법은 무엇입니까?
코드의 관련 부분을 게시하려고합니다. 나는 이것이 뷰가 할당 해제 된 곳이라고 생각한다.
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if(actionSheet.tag == 102)
{
if(buttonIndex == 0)
{
[self.infoView removeFromSuperview];
self.isSaveInfo = NO;
[self.doneButton.target performSelector:self.doneButton.action withObject:self.doneButton.target]; //This is where the view is getting released.
if([[NSBundle mainBundle] loadNibNamed:@"UploadView" owner:self options:nil])
{
[self.uploadView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview:self.uploadView];
}
[self performSelector:@selector(RemoveView) withObject:nil afterDelay:3.0];
}
if(buttonIndex == 1)
{
[self.infoView removeFromSuperview];
self.isSaveInfo = YES;
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadSaveButton) name:@"callThisMethod" object:nil];
MyInfoViewController *myInfoViewController = [[MyInfoViewController alloc]initWithNibName:@"MyInfoViewController" bundle:nil];
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
[self.navigationController myInfoViewController animated:YES];
[myInfoViewController release];
}
}
}
-(void)RemoveView
{
if([MyViewController OnSave])
{
self.testAlert = [[[ UIAlertView alloc]initWithTitle:messageTitle message:messageBody delegate:self cancelButtonTitle:messageClose otherButtonTitles:nil]autorelease];
self.testAlert.tag = 1;
[self.testAlert show];
[MyViewController setValue:NO];
}
else
{
self.testAlert = [[[ UIAlertView alloc]initWithTitle:messageTitle message:messageBody delegate:self cancelButtonTitle:messageClose otherButtonTitles:messageTryAgain, nil]autorelease];
self.testAlert.tag = 2;
[self.testAlert show];
}
}
-(void)loadSaveButton
{
[doneButton.target performSelector:doneButton.action];
if([[NSBundle mainBundle] loadNibNamed:@"UploadView" owner:self options:nil])
{
[self.uploadView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview:self.uploadView];
}
[self performSelector:@selector(RemoveView) withObject:nil afterDelay:3.0];
}
뷰가 버튼으로 한 지수가 정상적으로 작동되는 경우, 할당 해제지고 여기서 인덱스 0 UIActionSheet
버튼 내부 코드이다.
대리자가 경고보기 전에 사라지는 것이 합리적입니까? 진정한 모달은 아니지만 UIAlertView는 모달보기처럼 보이며 모달보기로 사용하기위한 것입니다. 그런 관점에서 (그리고 몇 가지 가정을하고 자유롭게 수정하십시오), 경고보기가 생성되는 동안 (경고보기를 생성하는) 대리자가 더 이상 필요하지 않게됩니다 (보기 계층에서 팝업 됨). 표시됩니다. – pmf
나는 질문을 편집하고 약간의 코드 –