- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试让我的 iPhone 应用程序在按下注销按钮时以编程方式重新启动。
有人有代码示例可以分享吗?我读过可以通过修改 main.m 文件,但我找不到任何与此相关的代码。
任何帮助将不胜感激。
最佳答案
注意:
虽然这已被回答为“不可能”,但我认为对于新的 iOS 开发人员来说,这是一个有效的问题,他们可以做一些他们想做的事情。
有一种方法可以从用户的角度“重启”您的应用,而技术上不是重启或退出 iOS 应用。正如其他答案所指出的那样,iOS 应用程序永远不应明确退出,因为这在 iOS 上是不允许的。
我的回答:
如果您希望您的应用恢复到启动时的状态,这不是 100% 可能的,但我将解释一种方法来获得大部分的方式,这应该足以满足所有有效目的。
首先要做的是重新创建你的 Root View Controller 。我建议从应用程序委托(delegate)中的方法执行此操作,如下所示:
- (void)resetAppToFirstController
{
self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil];
}
在许多情况下,这已经足够了,但是您拥有的任何应用程序状态也应该在此方法中重置。例如,注销用户,重置任何非持久状态,并尽可能取消(释放)所有对象。此方法还可用于从 application:didFinishLaunchingWithOptions
初始创建您的第一个 View Controller 。
框架类和单例:
您将无法完全重置任何框架单例或每个应用实例的状态,例如:
[UIApplication sharedApplication];
[NSNotificationCenter defaultCenter];
[NSUserDefaults standardUserDefaults];
[UIScreen screens];
// etc...
这可能很好,因为无论如何您都不应该在这些中存储任何非持久状态(NSNotificationCenter
除外,但所有注册的观察者都应该在对象被释放时被删除)。如果您确实想要初始化或重置任何框架状态,您可以在相同的 resetAppToFirstController
方法中进行。无论如何,应该没有必要重新创建这些,或者 window
对象。
如果您有任何自己的单例,您可以通过将它们存储在单例持有者类(它本身就是一个真正的单例)中来重新创建它们。从概念上讲,这是一个简单的单例类,其中包含每个其他单例的属性和一个 reset
方法来取消和释放它们。您的其他单例应使用此类(而不是静态或全局变量)来存储单例实例。如果您使用任何第三方库,请小心,因为它们也可能使用单例,您需要确保它们也使用您的单例持有者,以便您可以根据需要重置它们。无论如何,我认为这种技术是一种很好的做法,因为在某些情况下(例如单元测试),您确实希望通常是单例的对象消失并重新初始化为原始状态。但是,您不想将单例实现与单例持有者耦合,因此实现此目的的一个好方法是使用 NSMutableDictionary
作为 [UIApplication sharedApplication]< 上的关联对象
以单例类名作为键。但是,我有点跑题了,因为这是超出本问题范围的更高级的技术。
就用户而言,以上内容应该足以“重置”您的应用程序。如果你想作为你的第一个 View Controller ,你甚至可以再次显示启动画面。
关于iphone - 强制iphone应用程序以编程方式重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399611/
我搜索了重启我的 android 应用程序的替代方法,但我发现重启的唯一方法是使用 Flex 构建. 我可以用 as3 flash 重启我的 android adobe air 应用程序吗?我该怎么做
我有一个学校评估,是为了制作一个 child 的拼写游戏,当玩家单击"is"时,它必须循环/重新启动。到目前为止,当我测试游戏时,询问玩家是否想再次玩的选项/easygui.buttonbox 以
在.yml文件中,我定义了:restart: always。是否可以将此重启创建为--force-recreate标志的等效项? 我的XVFB有问题,标准重启无法解决问题,但通过--force-rec
我正在尝试重新启动 while 循环。我已经声明了 boolean 类型的变量 keepGoing 。如果 int 变量 x 超出窗口,则 keepGoing 更改为 false。然后reset()方
如何使用 Cast SDK 或其他方式让我的应用以官方 Chromecast 应用的方式触发 Chromecast 重启? 如果是“否则”,Google Play 可能会对这种做法不友善吗? 最佳答案
运行/etc/init.d/postgresql restart有没有危险?我们刚刚发生了一些关系“消失”的事件,我运行了上述命令。刚刚被系统管理员骂了一顿,但是他没有解释为什么这是一件坏事。我确实将
是否可以重新启动 while 循环?我目前在 foreach 循环中存在一个 while 循环,并且每次都需要 while 语句从头开始。 $sql = mysqli_query($link, "SE
我有如下倒计时器: - (void)updateCounterLabel:(NSTimer *)theTimer { if(secondsLeft > 0 ){ secondsLeft
就像我在 python 中一样。 choice1 = raw_input('John Blue Green') if choice1 == 'A': print('blah') elif cho
我的游戏在 True 循环中运行一段时间,我希望能够要求用户“再玩一次?”我已经有了用于弹出文本的矩形的代码,但我需要一种方法让用户单击矩形或按 y 表示是,然后代码再次自行运行。 最佳答案 在您的主
我是 nginx 的初学者。我正在使用 Ubuntu 16.04。我按照步骤操作, sudo apt-get 更新。 sudo apt-get install nginx sudo apt-get 升
我需要使用 javascript 重放一个 css 转换。当我重置我的 div 的 css 样式并应用新的过渡时,没有任何反应...... 我认为这两个代码是在同一个执行框架中执行的,并且通过优化,它
所以我有这几行代码: string[] newData = File.ReadAllLines(fileName) int length = newData.Length; for (int i =
所以我有一个计时器,每 5 秒旋转一组图像。因此,我在文档启动时运行它。 $(document).ready(function() { var intervalID=setInterval(funct
好吧,我在重新启动 Apache 服务器时遇到了一些问题。我修改了服务器上的 ulimit 但我无法重新启动 httpd; 我在 CentOS 5.8 x64 上运行服务器. httpd -V 的输出
我在使用 docker 时遇到问题 docker ps不会返回并被卡住。 我发现做 docker service restart 之类的sudo service docker restart (htt
从 .net 代码停止和重新启动 Storyboard的正确方法是什么? 我想 ... myStory.Stop(this); 期望随后调用 .Begin(this);将从零开始从时间线重新开始,但
我有一个带有一些缓存后端的应用程序,我想在重新启动网络服务器时清除缓存。 在网络服务器(重新)启动时是否有 apache 配置指令或任何其他方式来执行 shell 脚本? 谢谢, 菲尔 正如一些答案已
我愿意在我的应用程序中添加一个按钮,单击该按钮将重新启动应用程序。我搜索了谷歌,但发现除了 this one 没有任何帮助.但是这里遵循的程序违反了 Java 的 WORA 概念。 是否还有其他以 J
我们目前遇到间歇性邮件队列中断。我是 seeking diagnostic help in another area . 同时,有没有办法在不重启整个服务的情况下重启CF邮件队列? CF8标准 Win
我是一名优秀的程序员,十分优秀!