UIActionSheet showInview方法导致第二次崩溃应用程序

时间:2014-10-16 08:01:13

标签: ios iphone ios8

我正在使用UIActionSheet来选择选项。相同的代码在iOS 7中运行良好,但问题出现在iOS 8中。

actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose an option" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:Nil otherButtonTitles:@"Option1", @"Option2", @"Option2", nil];

在IBAction上,我使用以下代码显示操作表。

[actionSheet showInView:[self view]];

第一次工作正常。但是第二次由于EXE_BAD_ACCESS,应用程序崩溃了 enter image description here

3 个答案:

答案 0 :(得分:0)

鼓励@TonyMkenu的评论我在下面做,这是有效的。

完成dismissViewControllerAnimated后,我发布了动作表。

[self dismissViewControllerAnimated:YES completion:^{
        actionSheet =nil;
}];

在致电之前,我每次都分配了行动表。

if(! actionSheet)
   actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose an option" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:Nil otherButtonTitles:@"Option1", @"Option2", @"Option2", nil];

[actionSheet showInView:[self view]];

答案 1 :(得分:0)

如果代码不在viewcontroller中,你可能只是让视图的窗口始终是keywindow。

 [actionSheet showInView:[self view]];
 [self.view.window makeKeyAndVisible];

答案 2 :(得分:-2)

你应该在iOS 8中使用UIAlertController,因为UIActionSheet和U​​IAlertView已被它取代。它非常简单并且可以使用块。这是您可以使用的示例。

- (IBAction)actionButtonAction:(id)sender {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Select an action" message:nil preferredStyle:UIAlertControllerStyleActionSheet];

    // These next two lines are necessary for iPad and wide layouts. 
    alertController.popoverPresentationController.sourceView = self.view;
    alertController.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width - 34, 20, 0, 0);




    [alertController addAction:[UIAlertAction actionWithTitle:@"Share Data" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        // Do action Share data
    }]];

    [alertController addAction:[UIAlertAction actionWithTitle:@"Share Plot" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        // Do action Share Plot
    }]];

    [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
         // User cancelled
    }]];

    [self presentViewController:alertController animated:YES completion:^{

    }];
}