如何重构代码以在主线程上调用 AppDelegate?

2024-04-15

我最近开始将我的项目从 Swift 3/Xcode 迁移到 Swift 4/Xcode。我的应用程序在运行时崩溃,因为主线程清理程序允许访问UIApplication.shared.delegate仅在主线程上,导致启动时崩溃。我有以下代码,在 Swift 3 中运行良好 -

static var appDelegate: AppDelegate {
    return UIApplication.shared.delegate as! AppDelegate;
}

我的代码中的其他类可以访问 appDelegate。我需要想办法回去UIApplication.shared.delegate从主线程。

Note:使用DispatchQueue.main.async{}从任何访问的地方阻止appDelegate不是一个选择。只需要在规定时间内使用static var appDelegate仅声明。

寻找聪明的解决方法。

相关崩溃消息:

主线程检查器:在后台线程上调用的 UI API:-[UIApplication delegate] PID:1094,TID:30824,线程名称:(无),队列名称:NSOperationQueue 0x60400043c540(QOS:未指定),QoS:0


通过使用调度组来解决。

static var realDelegate: AppDelegate?;

static var appDelegate: AppDelegate {
    if Thread.isMainThread{
        return UIApplication.shared.delegate as! AppDelegate;
    }
    let dg = DispatchGroup();
    dg.enter()
    DispatchQueue.main.async{
        realDelegate = UIApplication.shared.delegate as? AppDelegate;
        dg.leave();
    }
    dg.wait();
    return realDelegate!;
}

并在其他地方调用它

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

如何重构代码以在主线程上调用 AppDelegate? 的相关文章

  • 在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题

    Cordova 3 4 hooks 未在 iOS 中正确安装提到的插件 我正在添加install plugins js进入文件夹project project root hooks after platform add其中有以下代码 usr
  • 如何检测 swiftui 中是否存在键盘

    我想知道按下按钮时键盘是否存在 我该怎么做 我已经尝试过 但我没有任何运气 谢谢 使用该协议 KeyboardReadable 你可以符合任何View并从中获取键盘更新 KeyboardReadable协议 import Combine i
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • 奇怪的跨线程 UI 错误

    我正在编写一个 WinForms 应用程序 它有两种模式 控制台或 GUI 同一解决方案中的三个项目 一个用于控制台应用程序 一个用于 UI 表单 第三个用于保存两个界面也将连接的逻辑 控制台应用程序运行绝对流畅 保存用户选择的模型 它有一
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • 在 iOS 中使用 FB SDK 是否需要 Facebook 的成功审核?

    现在我需要使用Facebook SDK来自我的 iOS 应用程序中的 Facebook 所以我填写了有关我的应用程序的信息developer facebook com应用程序详细信息 但是 当我用我的设备测试我的应用程序时 我可以发布到 F
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 在不支持线程的程序加载的共享库中使用 C++11 多线程

    我目前正在尝试在共享库中使用 C 11 多线程 该库加载到 Linux 上的主程序 用 C 编写 中 这是一个大型模拟程序的一部分 我无法更改有关库加载的任何内容或更改一般的主程序 主程序是用 gcc 4 1 2 编译的 我没有它的源代码
  • 查找已用应用程序名称的捆绑包/开发人员

    我正在尝试将应用程序上传到应用程序商店并收到以下错误 很容易理解 The App Name you have entered has already been used 该应用程序不在 iTunes 上 有什么方法可以找出谁拥有该应用程序或
  • 如何在 iOS 应用程序中通过其他应用程序共享内容/数据,就像我们在 Android 应用程序中使用 Intent.ACTION_SEND 所做的那样?

    在Android中 我们可以通过Intent ACTION SEND startactivity api轻松共享内容 文本 图像 视频等 我已经有一个应用程序可以完美地做到这一点 并且有一个并行的 iOS 应用程序 我希望它能够实现相同的功
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件或将静态库加入现有二进制文件 (IOS)

    这是我第一次在 stackoverflow 上提问 我很绝望 我的任务是加载 dylib 或将静态库加入到 IOS 设备的现有可执行文件中 我将使用static void attribute constructor initialize v
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • .NET UI 元素线程限制的原因

    我们知道 除了实例化元素的线程之外 不可能从任何线程执行操作任何 UI 元素属性的代码 我的问题是 为什么 我记得当我们使用 COM 用户界面元素时 在 COM Visual Basic 6 0 时代 所有 UI 元素都是使用 COM 类和
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘

随机推荐

  • 如何将 perforce 用户更改为超级用户

    如何将标准 perforce 用户更改为超级用户 看到很多关于如果超级用户密码丢失该怎么办的问题 但没有看到关于如何创建另一个超级用户或授予当前用户超级用户权限的问题 您将需要更新该用户的 Perforce Protections 表 例如
  • 从 React Native 应用程序中删除 console.log

    如果您删除console log 在将 React Native 应用程序部署到商店之前调用 是否存在一些性能或其他问题 如果console log 调用保留在代码中 有没有办法使用某些任务运行程序删除日志 类似于 Grunt 或 Gulp
  • 将数据从两个 UItextfield 传递到新的视图控制器

    我有点坚持尝试将数据从一个视图控制器上的两个 UITextfield 传递到另一个视图控制器 基本上我得到了以下物品 视图控制器 h import
  • TDD 在机器学习中的好处

    据我所知 TDD 的典型工作流程是基于黑盒测试的 首先我们定义接口 然后编写一个或一组测试 然后我们实现通过所有测试的代码 那么请看下面的例子 from abc import ABCMeta class InterfaceCalculato
  • 如何使用 Volley 获取并解析 JSON 对象

    我一直无法找到这个问题的详细答案 或者至少没有一个我能理解的答案 我正在尝试设置 Volley 以从 iTunes 中提取 JSON 对象 然后我想解析这些对象 获取它们的图像 URL 例如 这里是 iTunes JSON 对象 URL S
  • python使用ssh时找不到模块

    我在服务器上使用 python 当我运行需要 numpy 模块的 python 命令时 如果我这样做 ssh
  • 连接 Hibernate 的查询生成

    我想实施虚拟视图与预处理器 一个简单的例子 之前的HQL FROM PublishedArticle a 生效后的 HQL FROM Article a WHERE a published true 本质上 我需要一种在执行查询之前处理查询
  • Angular 4 和 ng-template

    我收到此警告 The
  • 使用python(谷歌应用程序引擎)获取上传文件的名称和扩展名

    我正在使用表单将文件上传到谷歌应用程序引擎并将它们存储在数据存储中 我还想存储原始文件名和扩展名以供演示之用 有没有办法从发布服务器端检索此数据 或者只能在客户端收集并作为单独的字段发送 例如http www tinyurl com 5jy
  • 使用已填充的模型添加非空且唯一的字段

    我的应用程序中有一个模型在带有一些条目的服务器中运行 我需要添加一个SlugField 对于该模型来说是唯一且非空的 这SlugField将根据trading name 我更改了模型以添加这个新字段并修改了保存方法 class Suppli
  • jqGrid treeGrid 捕获展开折叠事件

    我使用 jqGrid 来构建一些大树 现在我想记住cookie中展开和折叠的节点 所以我想捕捉展开和折叠事件 我在手册中找不到它 所以我用这种方式解决了 grid find div treeclick bind click function
  • PRY 或 IRB - 重新加载类并忘记已删除的功能

    如果您更改文件然后在 pry 或 irb 中重新加载它 它似乎会拾取您添加到该类中的任何新功能 但不会忘记您从该类中删除的旧功能 重现步骤 使用单一方法创建一个类 例如 say hello 打开 PRY 或 IRB 并且load my cl
  • 使用 $.html() 时如何提高渲染性能

    我正在研究骨干demo app https jsfiddle net o75r7fu9 8 显示推文列表 当我用不同的数据替换所有 推文 时 我使用以下命令清除列表 html render function item table html
  • 如何将powershell UTC日期时间对象转换为EST

    我收到了日期时间字符串 格式如下 2017 08 03T12 30 00 000Z 我需要能够将它们转换为 EST 我尝试过的每个函数都会抛出一个或另一个错误 通常是 String was not recognized as a valid
  • translate3d() 导致 jQuery 悬停/单击事件无法正确触发

    在分析不同 CSS 动画类型上的 jQuery 鼠标事件时 我注意到 translate3d 会导致悬停和其他事件无法正确触发 在一个基本示例中 我从右到左对块列表进行动画处理 翻转时 我将悬停的 LI 背景设置为绿色 注意 测试是为 we
  • 实时音高检测

    用于实时检测用户歌唱的音调FFT https stackoverflow com questions 1351381 fft problem returns random results and 自相关 https stackoverflo
  • 为什么不能使用“new”运算符创建泛型类型的实例?

    我发现了很多关于how克服这个限制 但没有说明为什么存在这个限制 除了this one https stackoverflow com questions 75175 create instance of generic type in j
  • 为什么我不应该为 React 和 babel 使用 CDN?

    当我学习 jQuery 和 Bootstrap 时 我们 我的学习 Web 框架的菜鸟同胞 被告知 CDN 有很多好处等等 现在我正在涉足 React Babel 我们被告知应该从我们的主机服务器下载文件并准备好一切 但我们仍然能够使用 C
  • int[] 数组和 int array[] 之间的区别

    最近一直在思考两种定义数组方式的区别 int array int array 有区别吗 它们在语义上是相同的 这int array 添加语法只是为了帮助 C 程序员习惯 java int array更可取 并且更不易混淆
  • 如何重构代码以在主线程上调用 AppDelegate?

    我最近开始将我的项目从 Swift 3 Xcode 迁移到 Swift 4 Xcode 我的应用程序在运行时崩溃 因为主线程清理程序允许访问UIApplication shared delegate仅在主线程上 导致启动时崩溃 我有以下代码