Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UIAlertView在发布模式下导致崩溃_Objective C_Iphone - Fatal编程技术网

Objective c UIAlertView在发布模式下导致崩溃

Objective c UIAlertView在发布模式下导致崩溃,objective-c,iphone,Objective C,Iphone,如果当用户转到相机时,我的应用程序中的“帮助”选项被激活,我会首先显示一个UIAlertView,其中包含如何拍照的提示: -(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex != [actionSheet cancelButtonIndex]) { NSString *selectedButtonTitle

如果当用户转到相机时,我的应用程序中的“帮助”选项被激活,我会首先显示一个UIAlertView,其中包含如何拍照的提示:

-(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];