当前位置: 首页 > 面试题库 >

UIAlertView / UIAlertController iOS 7和iOS 8兼容性

鄢英毅
2023-03-14
问题内容

我正在使用Swift编写应用程序,并且需要显示警报。该应用程序必须兼容iOS 7和iOS
8。既然UIAlertView已被替换UIAlertController,如何在UIAlertController不检查系统版本的情况下检查是否可用?我听说苹果建议我们不要检查设备的系统版本,以确定API的可用性。

这是我在iOS 8上使用的功能,但是在iOS 7上使用“ dyld: Symbol not found: _OBJC_CLASS_$_UIAlertAction” 崩溃:

let alert = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
let cancelAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)

如果我使用iOS 8的UIAlertView,则会收到以下警告: Warning: Attempt to dismiss from view controller <_UIAlertShimPresentingViewController: 0x7bf72d60> while a presentation or dismiss is in progress!


问题答案:

检测模式与Objective-C样式相同。

您需要检测当前的活动运行时是否具有实例化此类的能力

if objc_getClass("UIAlertController") != nil {

     println("UIAlertController can be instantiated")

      //make and use a UIAlertController

 }
 else {

      println("UIAlertController can NOT be instantiated")

      //make and use a UIAlertView
}

不要尝试根据操作系统版本来解决这个问题。您需要检测 操作系统能力。

编辑

该答案的原始检测器NSClassFromString("UIAlertController")-O优化后失败,因此将其更改为对Release版本有效的当前版本

编辑2

NSClassFromString 在Xcode 6.3 / Swift 1.2中进行所有优化



 类似资料:
  • 本文向大家介绍IOS 远程通知兼容(IOS7,IOS8)实例详解,包括了IOS 远程通知兼容(IOS7,IOS8)实例详解的使用技巧和注意事项,需要的朋友参考一下 IOS 远程通知 1.证书推送安装  证书的操作过程我就不说了,网上一大堆,首先我要说一下为什么要这些证书其实就是告诉苹果服务器三点:         1.我们要为哪个应用做推送         2.哪台电脑上做推送调试        

  • 我的项目计划使用SSO(可能使用Gluu或Auth0,…)并且正在考虑将GraphQL应用到我们的API中。 乍一看,这两个应该很容易兼容,因为它们在不同的层上工作。但是我仍然想听听有这两个方面经验的人在将它们应用于项目时是否有任何问题、考虑因素或指导方针?

  • 本章提供了有关 版本控制 章节中提供的破坏性和非破坏性修改列表的详细说明。 什么算是一个破坏性(不兼容)的变化并没有明确的定义。本指南应该被视为指示性的,而不是每一种可能变化的全面清单。 这里列出的规则只涉及客户端兼容性。预期API生产者明白在部署方面的要求,包括实现细节的变化。 一般目的是,服务端更新到一个新的minor版本或patch版本不该破坏客户端。可预期的破坏类型有: 源代码兼容性:针对

  • 语言补丁 Array.isArray Object.assign JSON.stringify console-polyfill Object.keys Object.is Array.prototype.forEach Function.prototype.bind 或者直接使用https://polyfill.io/ 提供的动态补丁方案 <script src="https://cdn.pol

  • 问题内容: 我们收到了一些为linux编译的库(.a)(可能是用GCC 6.x编译的)。 我们正在使用GCC 4.8,并且在尝试链接时遇到类型错误: 通常,可以通过确保所有单元都使用相同的标志进行编译来解决此问题。但是,如果我理解正确,它是由GCC 5.1及更高版本引入的。 是否有办法在GCC 4.8上进行这项工作,还是我们需要让人们用不同的方式重新编译库? 我想如果我们能够切换到GCC> = 5

  • 最近,我开始研究activiti框架,将其集成到我当前的项目中。在我们的项目中,我们使用teradata数据库。因此,我添加了activiti依赖项,并创建了简单的bpmn流程以进行测试。我用h2 inmemory数据库测试了这个过程,效果很好。但当将项目配置为使用teradata时,我在spring boot应用程序启动时遇到了异常。 我在google上只找到了这个主题: https://hub