PresentViewController不在目标c中工作。应用程序正在崩溃

时间:2016-06-17 05:32:12

标签: ios objective-c uialertcontroller presentviewcontroller

当我尝试提供警报视图控制器时,我的应用程序崩溃了。

-(void)setupAlertCtrl{
    self.alertCtrl=[UIAlertController alertControllerWithTitle:@"Select Image"
                                                       message:nil
                                                preferredStyle:UIAlertControllerStyleActionSheet];

}
- (IBAction)selectImagePressed {
    **[self presentViewController:self.alertCtrl
                       animated:YES
                     completion:nil];//this funcanility is breaking**

}

例外

  

libc ++ abi.dylib:以NSException类型的未捕获异常终止

8 个答案:

答案 0 :(得分:1)

libc ++ abi.dylib:以NSException类型的未捕获异常终止

如果您已将按钮连接到不再存在(或已重命名)的IBAction,也可能发生这种情况“

如果您遇到此问题而不是转到故事板,请右键单击电话号码顶部的黄色方框图标(查看控制器),然后用黄色标记删除插座。

在这样的情况下会发生什么事情,你可能会命名一个动作,然后重命名它。

希望这会对你有所帮助。

答案 1 :(得分:1)

此代码肯定会对您有所帮助。 我怀疑你正在使用iPad(iPad中的正常操作表崩溃) - (void)setupAlertCtrl {

if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)

{

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@"Your message" preferredStyle:UIAlertControllerStyleActionSheet];

    // Remove arrow from action sheet.
    [alertController.popoverPresentationController setPermittedArrowDirections:0];
    //For set action sheet to middle of view.
    CGRect rect = self.view.frame;
    rect.origin.x = self.view.frame.size.width / 20;
    rect.origin.y = self.view.frame.size.height / 20;
    alertController.popoverPresentationController.sourceView = self.view;
    alertController.popoverPresentationController.sourceRect = rect;

    [self presentViewController:alertController animated:YES completion:nil];    }
else
{
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:@"Your message" preferredStyle:UIAlertControllerStyleActionSheet];
    [self presentViewController:alert animated:YES completion:nil];
}

}

答案 2 :(得分:0)

你必须在视图中调用以下函数加载

-(void)setupAlertCtrl

然后您可以点击按钮

打开警报

答案 3 :(得分:0)

你应该像它一样写,

-(void)setupAlertCtrl
 {
     self.alertCtrl=[UIAlertController alertControllerWithTitle:@"Select Image"
                                               message:nil
                                        preferredStyle:UIAlertControllerStyleActionSheet];
     [self presentViewController:self.alertCtrl animated:YES completion:nil];
 } 

-(IBAction)selectImagePressed 
{
    [self setupAlertCtrl];
}

希望这会对你有所帮助。

答案 4 :(得分:0)

@media screen and (min-width: 768px) { #mainNavbar > li { margin-left: 20px; border-radius: 4px; } } UIAlertControllerUIAlertView功能相同的基于数据块的替代品。通过在创建控制器时设置首选样式来完成警报或操作表之间的切换。

UIActionSheet

我希望这会对你有帮助......

答案 5 :(得分:0)

它不会崩溃, 只需在SetupAlertCntrl方法中调用viewDidLoad即可。 工作正常

答案 6 :(得分:0)

你需要先检查你的alertController是否存在,如果不是先创建它。还有一件事,UIAlertControl只能从UIViewController中呈现,所以请确保selectImagePressed函数中的self是UIViewController的一种。

- (IBAction)selectImagePressed {
        if(self.alertController == nil) {
         [self setupAlertCtrl];
        }
        [self presentViewController:self.alertCtrl
                           animated:YES
                         completion:nil];//this funcanility is breaking**

    }

答案 7 :(得分:0)

尝试以下代码:

-(void)setupAlertCtrl
{
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Choose Profile Image " message:@" " preferredStyle:UIAlertControllerStyleActionSheet];

     UIAlertAction* cameraAction = [UIAlertAction actionWithTitle:@"Take Photo" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
         NSLog(@"Camera Action");
    }];
    [alertController addAction:cameraAction];

    UIAlertAction* gallaryAction = [UIAlertAction actionWithTitle:@"Gallary" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"Gallary Action");
    }];
    [alertController addAction:gallaryAction];

    UIAlertAction* Cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
    [alertController addAction:Cancel];

    [self presentViewController:alertController animated:YES completion:nil];
}

//按钮点击操作

 - (IBAction)selectImagePressed:(id)sender 
   {

    [self setupAlertCtrl];

   }

希望这会对你有所帮助。