我有一個UIAlertView
帶有2個按鈕。但我無法得到它的clickedButtonAtIndex
事件。問題是因爲- (void)dealloc
方法被過早調用,我將代理設置爲nil。因爲警報視圖按鈕點擊無法處理。這可能是什麼原因。過早調用Dealloc方法
編輯: 我的代碼有2個流向。在一個流向上,它的工作正常。 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];
}
內部UIActionSheet
按鈕0索引的代碼,是在視圖得到釋放,其中作爲按鈕1個索引工作正常。
代理人在警報視圖之前消失是否有意義?雖然不是真正的模態,但UIAlertView看起來像一個模態視圖,旨在用作模態視圖。從這個角度(並做出一些假設,隨時糾正它們),當警報視圖不再需要時(從視圖層次中彈出),委派(創建警報視圖?)不再需要顯示。 – pmf
我編輯了這個問題,並更新了一些代碼 –