Objective c UIAlertView在发布模式下导致崩溃
如果当用户转到相机时,我的应用程序中的“帮助”选项被激活,我会首先显示一个UIAlertView,其中包含如何拍照的提示:Objective c UIAlertView在发布模式下导致崩溃,objective-c,iphone,Objective C,Iphone,如果当用户转到相机时,我的应用程序中的“帮助”选项被激活,我会首先显示一个UIAlertView,其中包含如何拍照的提示: -(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex != [actionSheet cancelButtonIndex]) { NSString *selectedButtonTitle
-(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错误访问错误。从这一点上,我可以很好地展示一个新的视图控制器,但是UIAlertView总是会使应用程序崩溃。为什么?我不知道为什么它会在调试模式下工作,但看起来您正在释放cameraHelpView,而它仍在使用中。在alert的子视图中,有一个指向cameraHelpView的指针;当你释放它时,它就不能再被访问了。我建议将此上下文中的所有-[NSObject release]调用替换为-[NSObject autorelease]。因此:
去试试吧,告诉我它是否有效。祝你好运 我发现了我的错误。我没有把nil作为最后的参数传递给其他buttontiles!调试模式必须为您查看并修复此错误。希望这对某人有所帮助。感谢您的回复。当cameraHelpView作为子视图添加到UIAlertView时,警报将保留cameraHelpView的副本,直到警报发布。这就是为什么在将cameraHelpView添加为子视图后可以安全地释放它。
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];