2013-02-21 75 views
0

我採取一個非常簡單的iOS應用程序只是練顯示彈出警報,我得到一個錯誤,當我按下alert按鈕:基本使用UIAlertView中會導致EXC_BAD_ACCESS

線程1:EXC_BAD_ACCESS (碼= 1,地址= 0x676f6f57)

這是代碼:

- (IBAction)AlertButton { 


    alert = [[UIAlertView alloc] 
     initWithTitle:@"Alert" message:@"Alert" 
     delegate:self 
     cancelButtonTitle:@"Dismiss" 
     otherButtonTitles:@"Apple", "Google" ,nil]; 
    [alert show];} 


-(void)alertView :(UIAlertView *)alertView clickedButttonAtIndex:(NSInteger)buttonIndex{ 

    if(buttonIndex == 1){ 
     [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://apple.com"]]; 
    } 
    if(buttonIndex == 2){ 
     [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://google.com"]]; 
    }} 
+2

請不要張貼鏈接到您的整個項目。如果你不能足夠簡潔地描述你的問題以適應帖子內容,那麼你的問題不適合堆棧溢出。 – 2013-02-21 19:40:29

+0

我相信問題是你的button = AlertButton的名稱,IBaction的名稱也是AlertButton。上述代碼中的UIAlertView沒有任何問題。 – 2013-02-21 19:44:16

回答

4

問題與UIAlertView的構造,在該行:

otherButtonTitles:@"Apple", "Google" ,nil]; 

你忘了@之前"Google"。最後修改:

-(void)alertView :(UIAlertView *)alertView clickedButttonAtIndex:(NSInteger)buttonIndex{ 

通過

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
+1

「此外,你必須在你的類上聲明協議UIAlertViewDelegate的採用」 - 不,你不需要,它只是編譯器的提示。 – 2013-02-21 19:59:59

+0

是的,你是對的,在這種情況下沒有必要,我修復了答案 – tkanzakic 2013-02-21 20:03:46

+1

謝謝。 (不是我主張避免它,因爲這樣做是很好的做法,只是爲了記錄 - 人們經常會忘記Objective-C是一種高度動態的語言,聲明事關重大。) – 2013-02-21 20:04:48

1

真正的問題是在你的前會錯過的,所以它不是NSString,因此崩潰。

使用本 .H

不需要IBOutlet.just

UIAlertView *alert; 

.M

alert = [[UIAlertView alloc] 
     initWithTitle:@"Alert" 
       message:@"Alert" 
      delegate:self 
    cancelButtonTitle:@"Dismiss" 
    otherButtonTitles:@"Apple", @"Google", nil 
]; 
+0

非常感謝你:) – Rayan 2013-02-21 20:38:37