为什么我的UIAlertActions在iPad Air上变为零

时间:2015-04-16 19:15:53

标签: ios objective-c ipad

我正在开发一个最初为iOS 6编写的旧iOS应用程序,它有一些需要更改的UIActionSheets,所以我一直在努力使用UIAlertActions将它们移动到UIAlertControllers。这在iPad2模拟器上运行得非常好,但是当在iPad Air(我唯一可以访问的iPad)上进行测试时,我的UIAlertAction和UIAlertController在创建后直接变为零(在调试器中查看,它会在创建时收到指针)但是,只要它执行下一行,它就变为空)。这是一个代码示例:

//When hovering over the next line, alert has a pointer
UIAlertController* alert = [UIAlertController 
                           alertControllerWithTitle:@"info"
                           message:@"testmessage"
                           preferredStyle:UIAlertControllerStyleActionSheet];
//alert pointer is now nil
//test pointer shows up 
UIAlertAction* test= [UIAlertAction
                        actionWithTitle:@"I'm a Button"
                        style:UIAlertActionStyleDefault
                        handler:^(UIAlertAction * action){
                          [alert dismissViewControllerAnimated: YES completion:nil];
                        }
                      ];
//test pointer is nil, test2 pointer exists
UIAlertAction* test2 = [UIAlertAction
                        actionWithTitle:@"I'm a Button"
                        style:UIAlertActionStyleDefault
                        handler:^(UIAlertAction * action){
                          [alert dismissViewControllerAnimated: YES completion:nil];
                        }
                      ];
//test2 pointer is nil
[alert addAction:test];
[self presentViewController:alert animated:YES completion:nil]; //app crashes, because I'm trying to present a nil modal.

任何想法或帮助都会有很大帮助!

1 个答案:

答案 0 :(得分:2)

UIAlertController适用于iOS8以上版本。在iOS8之前使用UIAlertView和UIActionSheet

您最好检查一下您的设备是否响应了课程,

if ([UIAlertController class]) {
   // use UIAlertController for the action sheets as you have already posted

//    For all operating systems (like iOS8 upwards) will land in here. 

} else {
  // use UIActionSheet - like you already used for iOS6

}

检查操作系统部署号是不明智的,比如8.0等,检查它是否响应类是正确的方法。

它可以防止崩溃意味着您不依赖于不保证可靠的浮点数,就好像它们改变了将来命名操作系统的方式一样,您的代码会崩溃。