2014-10-09 55 views
0

我使用XCode 5.1.1進行開發,並使用iOS模擬器測試我的應用程序。 我有一個具有保存,取消和刪除選項的操作表。我還沒有編寫保存和刪除的操作處理,但點擊取消應該返回到前一個屏幕(我已經使用導航控制器在屏幕之間移動)。但點擊取消,拋出我「ViewController actionSheet:clickedButtonAtIndex:]:郵件發送到釋放實例」錯誤,我無法解決。我已將所有元素正確地連接到他們的插座/操作。以下是我的代碼。請幫忙。 (我試圖在單擊「返回」按鈕時顯示操作表,在操作表中,當我點擊取消時,必須顯示前一個屏幕 - 我想這可以通過dismissViewControllerAnimated完成,該操作會關閉當前的控制器並顯示以前的控制器)UIActionSheet引發ViewController actionSheet:clickedButtonAtIndex

-(IBAction)returnModalAction:(id)sender { 

    [self dismissViewControllerAnimated: YES completion: NULL]; 

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"What do you want to do with the user values?" 
        delegate:self 
        cancelButtonTitle:nil 
        destructiveButtonTitle:@"Delete" 
        otherButtonTitles:@"Save", nil]; 
    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"]; 
    [actionSheet showInView:self.view]; 
} 


-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ 


    if (buttonIndex == 2) { 
     NSLog(@"You have pressed the %@ button", [actionSheet buttonTitleAtIndex:buttonIndex]); 

    } 
} 

回答

-1

在你的方法returnModalAction:你解僱的觀點,所以垃圾收集器會釋放自我(視圖控制器)的所有引用在內存中,這就是爲什麼當您嘗試到顯示動作表[actionSheet showInView:self.view];你會得到錯誤,因爲內存中的引用不存在。

所以你要做的就是當你真的想顯示前一個屏幕時,你的情況是在actionSheet:clickedButtonAtIndex:方法的基礎上,按鈕的索引執行[self dismissViewControllerAnimated: YES completion: NULL];

+0

僅供參考,在Swift和/或Obj-C中沒有垃圾收集器。有ARC不是垃圾收集器。 – TheCodingArt 2014-10-09 18:24:36

+0

非常感謝,marcos1490,你的回答幫助我解決了這個問題。我現在得到了更好的理解。謝謝! – vasupradha 2014-10-09 19:37:09