2009-09-30 69 views
0

如果幫助選項在我的應用程序啓動的時候,用戶進入到相機,我首先顯示一個UIAlertView中關於如何拍攝照片提示:UIAlertView中導致崩潰在Release模式

-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { 
if (buttonIndex != [actionSheet cancelButtonIndex]) { 
    NSString *selectedButtonTitle = [actionSheet buttonTitleAtIndex:buttonIndex]; 
    if ([selectedButtonTitle isEqualToString:@"Camera"]) { 
     // If Help is activated display camera tips 
     if (helpEnabled == YES) { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Camera Tips" message:@"\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Go To Camera"]; 
      UIImageView *cameraHelpView = [[UIImageView alloc] initWithFrame:CGRectMake(17, 40, 250, 255)]; 
      UIImage *cameraTutorial = [UIImage imageNamed:@"Camera_Tips.png"]; 
      cameraHelpView.image = cameraTutorial; 
      [alert addSubview:cameraHelpView]; 
        [cameraHelpView release];  
      [alert show]; 
      [alert release]; 
     } 
    } 
} 

這個工程在調試模式,但在釋放模式下會導致「EXC BAD ACCESS」錯誤。我可以從這個角度以模態方式呈現一個新的視圖控制器,但是UIAlertView總是會使應用程序崩潰。爲什麼?

回答

0

我發現我的錯誤。我沒有通過零作爲otherButtonTitles的最後一個參數!調試模式必須爲您查看並修復此錯誤。希望這可以幫助某人。

0

我不知道它爲什麼在調試模式下工作,但它看起來像你正在釋放你的cameraHelpView,而它仍然被使用。在alert的子視圖中是指向cameraHelpView的指針;當你釋放它時,它不能再被訪問。我建議用-[NSObject autorelease]替換您在本文中調用的所有-[NSObject release]。因此:

UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Camera Tips" message:@"\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Go To Camera"] autorelease]; 
UIImage *cameraTutorial = [UIImage imageNamed:@"Camera_Tips.png"]; 
UIImageView *cameraHelpView = [[[UIImageView alloc] initWithFrame:CGRectMake(17, 40, 250, 255)] autorelease]; 
cameraHelpView.image = cameraTutorial; 
[alert addSubview:cameraHelpView]; 
[alert show]; 

繼續嘗試,讓我知道它是否有效。祝你好運!

+0

感謝您的回覆。當cameraHelpView作爲子視圖添加到UIAlertView時,警報將保留cameraHelpView的副本,直到警報發佈。這就是爲什麼在將它添加爲子視圖後釋放cameraHelpView是安全的。 – Ian 2009-10-04 02:02:22

+0

糟糕!對於錯誤信息抱歉。 – 2009-10-04 05:17:29