UIAlertView/UIAlertController iOS 7 和 iOS 8 兼容性

2024-03-26

我正在使用 Swift 编写一个应用程序,我需要显示一个警报。该应用程序必须兼容 iOS 7 和 iOS 8。自从UIAlertView已替换为UIAlertController,我如何检查是否UIAlertController不检查系统版本就可以使用吗?我听说 Apple 建议我们不要检查设备的系统版本来确定 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
}

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

EDIT

这个答案的原始检测器NSClassFromString("UIAlertController")在以下情况下失败-O优化,因此已更改为适用于发布版本的当前版本

EDIT 2

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIAlertView/UIAlertController iOS 7 和 iOS 8 兼容性 的相关文章

随机推荐

  • 每秒(或更短时间)检查 url 是否有效的最佳方法是什么,在 C# 窗口窗体应用程序 (.NET) 中使用 Task wait 或 ContinueWith

    我是 C Net 和 Visual Studio 2022 的新手 我想要实现的是每秒运行一个计时器来检查网站 url 是否有效 是否已启动 如果 url 可访问并且当前 WebView2 未显示该网站 那么它应该导航到该网站 如果它已经显
  • TypeScript 泛型:无效、从不或未定义? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 总是想知道这个问题 所以想要得到一个明确的答案并将其固定下来 我想做的是让编译器 语言服务 阅读器知道T应该什么都没有 空的 虚无 我想知道
  • 跨计算机快速同步 git 工作区

    我有一个使用 git 的个人项目 我经常在多台计算机上进行 hack 托管在 Github 上 因为我在家做这件事 所以经常被打扰 我正在发表声明 晚餐已经准备好了 否则我需要换尿布 当我重新开始编码时 我可能会使用另一台计算机 获取最新版
  • 如何在 iPhone 的自定义 UIView 上启用 UIDragInteraction

    我一直在尝试使用 Apple 的新 API 来启用自定义 UIView 上的拖动交互 我在使用 iPad 进行测试时成功地使其工作 但是当我在 iPhone 7 ios 11 beta 3 中运行相同的应用程序时 我无法拖动我的自定义 UI
  • SQL Server:将 bool 转换为整数

    为什么查询 SELECT CAST column LIKE string AS INT 100 return 关键字 AS 附近的语法不正确 因为 bool 不是 T SQL 中的类型 它不存在 布尔表达式不是位类型 他们不have类型 仅
  • 如何在 Polymer 1.0 中过滤铁列表?

    The dom repeat元素提供了一个filter属性 有没有类似的过滤方法iron list 例如 给定一个人员列表 我想过滤出生在特定城市的人 As iron list不幸的是不提供filter属性 没有声明性模式使这成为可能 您可
  • ActiveRecord:如何找到所有孩子都符合条件的父母?

    假设我有一个Parent模型有很多Child 然后Child也属于OtherParent 我怎样才能找到全部Parent其中所有的Child属于任何OtherParent 在纯 SQL 中我可以做 Parent find by sql lt
  • PySpark 可以使用 numpy 数组吗?

    我尝试在 pyspark 会话中执行以下命令 gt gt gt a 1 2 3 4 5 6 7 8 9 10 gt gt gt da sc parallelize a gt gt gt da reduce lambda a b a b 效果
  • 我的 onChange 不适用于反应

    我已经关注了这个文档 https facebook github io react docs forms html why select value并使用 React 创建了一个选择标签 我已经编辑了这个问题 如果我在选择中使用 class
  • 无法更新公司防火墙后面的 conda 软件包。更新了 .condarc 文件,代理设置仍然要求代理用户名和密码

    我位于公司防火墙后面 我正在尝试通过运行以下命令来更新 conda 软件包 conda update all 这是要求我提供代理用户名和密码 https proxy username https proxy username Passwor
  • 公开存储库的子集,同时保留历史记录

    我有一些受版本控制的代码 使用 Mercurial 并且想分享其中的一些代码 同时隐藏我无法发布到公共领域的其他部分 至少在现阶段 理想情况下 我希望保持公共代码的修订历史记录完整 更重要的是 能够在公共存储库和包含公共和私有代码的存储库之
  • 计算列表内列表之间的最小长度

    a 1 0 1 2 1 1 1 3111111 31 1 4 51 1 1 1 1 1 6 7 8 print min a 0 a 1 a 2 以下代码返回 1 0 1 2 1 1 1 3111111 不确定默认键是什么以及根据什么逻辑返回
  • 如何在购物篮中显示正确的税费(结账前)?

    我有一个简单的问题 我为不同国家设置了多种税率 但是 在购物篮页面上 当尚未访问结帐页面时 它会显示来自基准国家 地区的税费 就我而言 我在 AT 有一家商店 我已经为 AT 和 CH 设置了税费 如果用户使用瑞士 IP 进行访问 我会将国
  • 合并多个data.table

    我知道一个人可以合并 加入 两个data table与merge函数或 data table功能 然而 如果我说 10 data table并想要使用do call将它们全部合并在一起 是否有一个函数可以做到这一点 目前我求助于do cal
  • 覆盖 Object.toString 错误

    为什么这会在 Flash Builder 中产生错误 package public class Foo override public function toString String return Foo 制表符补全表明这可用于覆盖 错误
  • Silverlight 4 组合框下拉显示不一致

    我有一个 Silverlight 4 应用程序 在窗体底部附近有一个组合框 下拉列表中可以包含大约 30 到 100 个项目 当我第一次打开 ComboBox 时 没有 SelectedItem Dropdown 向上打开 大约有 23 个
  • GMail 线程、IMAP 和 Ruby

    我正在使用 Ruby IMAP 库来获取 GMail 对话 GMail 线程对话的方式是通过 Message ID 和 In Reply To 消息标头 例如 In Reply To lt email protected cdn cgi l
  • 在网页上包含不引人注目的信息的最佳方式

    所以我写了一些脚本 在我的页面上设置了谷歌地图 这些脚本包含在我的页面 并使用 jQuery 使用从页面上的地址列表生成的标记来构建地图 但是 我有每个地址的一些精确坐标数据 JavaScript 需要这些数据才能正确放置标记 这不是我希望
  • 为什么最终变量必须在构造函数完成之前初始化?

    为什么最终变量必须在构造函数完成之前初始化 public class Ex final int q 当我编译这段代码时 我收到这样的错误 错误 变量 q 可能尚未初始化 The official原因是它是由Java 语言规范 8 3 1 2
  • UIAlertView/UIAlertController iOS 7 和 iOS 8 兼容性

    我正在使用 Swift 编写一个应用程序 我需要显示一个警报 该应用程序必须兼容 iOS 7 和 iOS 8 自从UIAlertView已替换为UIAlertController 我如何检查是否UIAlertController不检查系统版