强制 iPhone 应用程序以编程方式重新启动?

2023-12-01

我试图让我的 iPhone 应用程序在按下“注销”按钮时以编程方式重新启动。

有人有代码示例可以分享吗?我读到可以通过修改 main.m 文件来实现,但我找不到与此相关的任何代码。

任何帮助,将不胜感激。


Note:

尽管这已被回答为“不可能”,但我认为对于新的 iOS 开发人员来说这是一个有效的问题,并且他们可以做一些事情,这可能就是他们想要的。

有一种方法可以从用户的角度“重新启动”您的应用程序,但这种方法不是技术上重新启动或退出 iOS 应用程序。正如其他答案所指出的,iOS 应用程序永远不应该显式退出,因为 iOS 上不允许这样做。

我的答案:

如果您希望您的应用程序返回到启动时的状态,这不是 100% 可能的,但我将解释一种方法,让您的应用程序能够充分满足所有有效目的。

要做的第一件事是重新创建根视图控制器。我建议通过应用程序委托中的方法执行此操作,如下所示:

- (void)resetAppToFirstController
{
    self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil];
}

在许多情况下,这已经足够了,但是您拥有的任何应用程序状态也应该在此方法中重置。例如,注销用户、重置任何非持久状态以及尽可能取消(释放)所有对象。此方法也可用于最初创建您的第一个视图控制器application:didFinishLaunchingWithOptions.

框架类和单例:

您将无法完全重置任何框架单例或每个应用程序实例的状态,例如:

[UIApplication sharedApplication];
[NSNotificationCenter defaultCenter];
[NSUserDefaults standardUserDefaults];
[UIScreen screens];
// etc...

这可能没问题,因为无论如何你都不应该在其中存储任何非持久状态(除了NSNotificationCenter,但是当对象被释放时,所有注册的观察者都应该被删除)。如果您确实想初始化或重置任何框架状态,您可以在相同的resetAppToFirstController方法。无论如何,应该没有必要重新创建这些,或者window object.

如果您有任何自己的单例,则可以通过将它们存储在单例持有者类(它本身就是真正的单例)中来重新创建它们。从概念上讲,这是一个简单的单例类,具有每个其他单例的属性和一个reset方法将它们全部无效并释放。您的其他单例应该使用此类(而不是静态或全局变量)来存储单例实例。如果您使用任何第三方库,请务必小心,因为它们也可能使用单例,您需要确保它们也使用您的单例持有者,以便您可以根据需要重置它们。我认为这种技术无论如何都是很好的实践,因为在某些情况下(例如单元测试),您确实希望通常是单例的对象消失并重新初始化为原始状态。但是,您不想将单例实现与单例持有者结合起来,因此实现此目的的一个好方法是使用NSMutableDictionary作为关联对象[UIApplication sharedApplication]以单例类名作为键。然而,我有点偏离主题,因为这是超出这个问题范围的更先进的技术。


就用户而言,上述内容应该足以“重置”您的应用程序。如果您想作为第一个视图控制器,您甚至可以再次显示启动屏幕。

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

强制 iPhone 应用程序以编程方式重新启动? 的相关文章

  • 如何随机化 NSArray? [复制]

    这个问题在这里已经有答案了 假设我有一个 NSArray 里面有 50 100 个对象 如何将数组按随机顺序排列 有很多方法可以做到这一点 但大多数只涉及生成随机数 也许您可以使用 NSMutableArray 使用此技术 生成 0 到 4
  • C / Objective C 中的 switch 语句

    我是 Objective C 的新手 但根据我对 switch 语句的了解 以下代码不应该打印任何内容 因为对我来说 似乎应该存在编译错误 但是打印了 2 我不懂为什么 有人可以解释一下吗 void test int myVar 2 swi
  • 尝试使用 Xcode 的新 UI 测试运行多个测试失败

    当我尝试在新的 Xcode beta 中同时运行多个 UI 测试时 它在第一次测试后失败 并在第一次测试后的每个测试中出现错误 UI 测试失败 应用程序状态仍未终止 有人解决这个问题了吗 我也遇到过同样的问题 看来 至少就我而言 应用程序从
  • iOS通过AVAssetWriter反转音频

    我正在尝试使用 AVAsset 和 AVAssetWriter 在 iOS 中反转音频 以下代码可以正常工作 但输出文件比输入文件短 例如 输入文件的持续时间为 1 59 但输出文件的持续时间为 1 50 且音频内容相同 void reve
  • 动态更新 UIAlertView 消息和换行符问题

    我需要在 UIAlertView 的消息中显示多行文本 我尝试过添加 n 但没有效果 它仍然显示 这是一个示例 但是 如果我将 iPhone 切换为横向模式 它会按照我的预期显示该消息 然后 如果我切换回纵向模式 它也会正确显示 更新 经过
  • 将圆角应用于使用 UIBezierPath 创建的圆弧

    我正在研究一个使用 UIBezierPath 创建的圆形进度条 进度条如下图所示 我的问题是 如何使圆弧的边缘变成圆形而不是矩形 我用来绘制圆弧的代码如下 Draw the arc with bezier path int radius 1
  • 关闭子级后,父级 UIViewController 方向不应更改

    假设我有三个 UI 控制器 A B C A 是我的根控制器 在 ShouldAutoRotate 方法中我返回 YES 我从A到B呈现ModalView B gt 在ShouldAutoRotate方法中我返回Portrait 然后从B我向
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • iphone:使用 iOS 5 和 Xcode 4.2 提交应用程序? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个在
  • Sprite Kit - 确定轻弹精灵的滑动手势矢量

    我有一个游戏 圆形物体从屏幕底部射出 我希望能够滑动它们以将它们朝我滑动的方向轻弹 我的问题是 我不知道如何计算滑动的矢量 方向 以便使圆形物体以适当的速度向正确的方向轻拂 我使用的静态矢量 5 5 需要通过滑动速度和滑动方向来计算 另外
  • 允许用户从 UILabel 选择文本进行复制[重复]

    这个问题在这里已经有答案了 我有一个 UILabel 但如何允许用户选择其文本的一部分 我不希望用户能够编辑文本 也不希望标签 文本字段具有边框 这是不可能的UILabel 你应该使用UITextView为了那个原因 只需使用禁用编辑即可t
  • 如何使用 xcode 3.1.3 处理 iAd

    目前我正在集成 iAds 并制作该应用程序的精简版 我的问题是以前我使用的 iAds 是 xcode 4 1 3 但目前我使用的是 xcode 3 1 3 iAds 不支持我们所做的 请帮助我 NSString contentSize UI
  • 学习目标-C。使用 Xcode 3.2.1。错误是什么:程序收到信号:“EXC_ARITHMETIC”

    我正在使用 Stephen Kochan 的优秀著作 Programming in Objective C 2 0 来学习 Objective C 我也是 Xcode 新手 到目前为止 我的所有练习都运行良好 但是当我运行第 153 页上的
  • iOS:保持应用程序在后台运行

    如何让我的应用程序在后台运行 我需要越狱我的 iPhone 才能执行此操作吗 我只需要这个应用程序每隔设定的时间间隔从互联网上检查一些内容 并在需要时发出通知 以供我自己使用 是的 不需要越狱 查看本文档的 实现长时间运行的后台任务 部分A
  • 使用 AFNetworking 的 setImageWithURL 时如何配置缓存

    我在用着setImageWithURL在我的应用程序中下载一些图像 是否可以 指定此图像必须在缓存中保存多长时间 例如 1 周 指定缓存的最大总大小有多大 例如 200 兆 查看图像缓存中有什么 清除缓存 文档 http engineeri
  • 核心蓝牙在后台进行广告和扫描

    我一直在尝试设置一个应用程序 使设备既扫描外围设备又作为外围设备进行广告 目标是当两个设备通过蓝牙发现彼此靠近时在后台被唤醒 从 Apple 文档来看 您似乎应该能够在后台运行 BLE 启用蓝牙中心和蓝牙外设后台模式 并且当一台设备位于前台
  • 如何改进 iOS 中的 TWTweetComposeViewController 代码?

    我已经实现了以下代码来进行 Twitter 共享 在我的代码中 我尝试测试 iOS 5 如果这不起作用 我会回到使用 ShareKit 的 Twitter 代码进行共享的旧方式 我向同事展示了代码 他建议我的代码可能有缺陷 我需要做两件事
  • iPhone - 创建图像网格列表

    我正在开发一个应用程序 它从网站获取图像并使用网格视图向用户显示 例如Apple的照片应用程序 当您点击图像时 我会推送一个显示图像信息和其他内容的视图控制器 实现这个的更好方法是什么 我想到了自定义 UITableViewCell 我见过
  • 使用 NSSet/NSMutableSet 来过滤对象?

    我已经看到一些有关使用 NSSet NSMutableSet 过滤对象的问题 答案 这些情况使用简单类型的对象 例如NSString or int 以下是用于过滤的代码示例NSString对象 NSSet smallArray NSSet
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非

随机推荐

  • 当虚拟不起作用时

    目前我的 C 类中有一个奇怪的错误 我有一个 ActiveX 包装类 作为 wxWidgets 的一部分 我向其中添加了一个新的虚拟函数 我有另一个类继承自 ActiveX 类 wxIEHtmlWin 但是 ActiveX 类总是调用它自己
  • 显示无效的 SQL 类型:sqlKind = UNINITIALIZED 错误

    String s1 PasswordText4 getText String s2 ConfirmText4 getText String s3 NameText4 getText String s4 UsernameText4 getTe
  • boost::thread 数据结构大小太荒谬了?

    编译器 linux 上的 clang x86 64 我已经有一段时间没有编写任何复杂的低级系统代码了 而且我通常针对系统原语 Windows 和 pthreads posix 进行编程 所以 进出的事情已经从我的记忆中消失了 我正在与boo
  • VS Code typescript:自动实现接口

    我有一个打字稿界面 想自动实现它 我一直在环顾四周并根据这个计算器问题 and github问题 这个功能应该已经存在 但它对我不起作用 没有出现灯泡 如果接口没有必需的成员 则代码操作 快速修复将不会出现在类定义中 interface I
  • 为什么 scanf 中不需要地址运算符?

    为什么 std gt names firstName 不需要地址运算符 但是 stud gt studentid 中需要地址运算符吗 struct student struct char lastName 10 char firstName
  • adb logcat:增加最大消息长度

    似乎 logcat 截断了很长的日志消息 有没有办法防止这种情况 adb logcat g ring buffer is 64Kb 63Kb consumed max entry is 20480b max payload is 20460
  • 在unix中按文件大小排序

    我有一个 unix 文件 其中包含以下数据 35 ag 0 ca 22 0 K nt 43 8 G ct 90 0 M se 2 4 M ew 1 6 K et 0 er 0 dr 18 ld Output 43 8 G ct 90 0 M
  • 安装错误:INSTALL_FAILED_OLDER_SDK

    我是 Android 开发新手 我想首先获得Hello World应用程序正在运行 我正在使用 Eclipse IDE 和 Android 4 0 3 版本 15 SDK 我从教程网站复制了所有内容 但是当我尝试在virtual devic
  • CMake链接外部库

    首先 我是 CMake 的新手 我刚刚开始使用它 我想将外部库链接到我的项目 我使用我从中获取的代码CMake 维基 在文章末尾 这是我的 CMakeLists txt cmake minimum required VERSION 2 8
  • 如何使用检查器测试此应用实例? (没有 CoArbitrary 实例(验证 e0 [Char]))

    Checkers是一个可重用 QuickCheck 属性的库 特别是 标准类型类 如何编写一个检查器实例来测试我的验证应用实例是否有效 import Test QuickCheck import Test QuickCheck Checke
  • 如何使用 Postgresql 生成从当前日期算起的 52 周

    如何使用 postgresql 生成从当前日期算起的 52 周 例如 从 current date 即今天的日期 到 52 周 您可以使用生成系列它允许您定义范围 开始 停止 以及步骤间隔 例如 生成系列 开始日期 结束日期 stepBy
  • 如何将继承的小部件传递给整个 Material 应用程序

    所以我有一个继承的小部件 如下所示 class InheritedStateWidget extends StatefulWidget final Widget child InheritedStateWidget required thi
  • Selenium 2.53.5 httplib.BadStatusLine:''Python

    我正在尝试使用 Python 2 7 中的 Selenium 2 53 5 以在线表单自动注册序列号 该脚本已经运行了 2 个多月 但昨天我在运行它时开始收到错误 httplib BadStatusLine 有任何已知的修复方法吗 我读过前
  • 所有类方法都返回自动释放的对象吗?

    我正在重读 Mac OS X 的 Cocoa 编程 的前几章 作者指出其中之一NSCalendarDate的类方法返回一个自动释放的对象 我总是假设所有类方法都返回一个自动释放的对象 因为没有alloc涉及 是否有必须专门保留的类方法 Th
  • 当输入不匹配的字符串时,Scanf 在 while 循环中不起作用

    我正在使用一个名为的函数检查类型检查用户是否输入了有效的整数类型输入 例如 如果用户输入 15 它将打印valid15c 将打印无效 但是 如果用户仅输入字符串输入 例如ccccc 它会导致无限循环并且程序崩溃 我在下面添加了一些屏幕截图来
  • 在 $(window).load() 函数内运行 jQuery,但不在 $(document).ready 函数内运行

    我有一个现有的函数 可以使用 jQuery UI 位置插件在网页中显示图标 该函数位于 HTML 的页脚部分附近 尽管在某些地方它在头部部分输出 有人建议我在 window load 函数中加载这个 jQuery 原因是 document
  • 如何在 R 中导入 CSV 文件? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有一个 csv文件在我的工作站中 如何在 R 中打开该文件并进行统计计算 你会使用re
  • .htaccess 重写 url 到页面或目录

    对于我的网站 我有一个指向 URL 的 RewriteRulehttp www mysite com work到 work php 文件 我还有一个名为 work 的目录 其中包含文件 例如project1 php project2 php
  • cuda 上的矢量步加法速度较慢

    我正在尝试在 CUDA C 代码上运行向量步加法函数 但对于大小为 5 000 000 的大型浮点数组 它的运行速度比我的 CPU 版本慢 下面是我所说的相关CUDA和cpu代码 define THREADS PER BLOCK 1024
  • 强制 iPhone 应用程序以编程方式重新启动?

    我试图让我的 iPhone 应用程序在按下 注销 按钮时以编程方式重新启动 有人有代码示例可以分享吗 我读到可以通过修改 main m 文件来实现 但我找不到与此相关的任何代码 任何帮助 将不胜感激 Note 尽管这已被回答为 不可能 但我