在应用程序启动时在后台加载 UIViews

Posted

技术标签:

【中文标题】在应用程序启动时在后台加载 UIViews【英文标题】:Loading UIViews in the background on application launch 【发布时间】:2012-01-29 14:07:19 【问题描述】:

我有一个带有 5 个视图的简单 iPad 应用程序。在第一个视图中,要求用户进行一些选择并设置一些选项。根据这些信息,在向其他 4 个视图发送 NSNotification 消息后,它们会以编程方式更改。 (即添加、更新控件)。

我的问题是,当应用程序首次加载时,用户会看到 View1,但 View2、View3、View4 和 View5 从未打开过,所以我以编程方式对这些视图进行的任何更改都没有完成,当用户导航时对于他们(通过标签栏)第一次,没有显示任何更改。

[编辑:我应该指出,对每个视图进行更改的代码都包含在 ViewController 本身中,并且在视图观察到传入的 NSNotification 时执行。当视图未加载时,可以理解的是它从未收到传入的 NSNotification。]

只有在用户至少查看这些屏幕中的任何一个,然后返回 View1 并进行更改后,其他视图才会正确更新。

我认为我可以通过在应用程序启动时将视图 2、3、4 和 5 主动加载到内存中来解决此问题,以便它们准备好立即开始接收通知。

ios 5 中是否有一种简单的方法可以做到这一点?

【问题讨论】:

当其他视图被实例化和加载并且就在它们将出现在屏幕上之前,他们不能只从根视图(或视图 1)获取选择和选项更改,然后执行他们需要做什么定制? 好点。我可能应该多解释一下这个应用程序——它是一个 MIDI 设备的控制器,所以当用户在第一个屏幕上设置参数时,应用程序会开始一些 MIDI 对话,这会导致在“真实”中更新其他视图时间'。出于性能原因,MIDI 对话也发生在不同的线程上。如果其他视图可以在用户选择第一个视图上的选项后立即开始更新/整理,那将很方便。 【参考方案1】:

为什么视图会立即改变?

当用户在第一个视图上回答问题时,我会存储所需更改的指示器,然后在需要更改的每个视图的 -viewDidLoad 上应用更改。

【讨论】:

感谢赫子的回答。我在上面进一步解释了该应用程序是一个 MIDI 控制器,在第一个视图上设置选项将启动几个 MIDI 对话以更新其他视图。例如,当用户转到第二个视图时,他应该会看到大约 20 个从 MIDI 设备获取的音频 IR 设置。目前,他只看到默认设置,直到他离开该屏幕,重新选择第一个屏幕上的选项,然后返回到第二个屏幕。【参考方案2】:

建议您使用用户在第一个视图上设置的选项来初始化这些视图,而不是尝试将视图加载到内存中。我通常在这种情况下做什么,当我有一个在许多地方使用的全局参数时,我创建一个实用程序类来保存数据,使其成为单例,然后访问 viewDidLoad中的共享实例> 在初始化期间使用数据的视图中。

【讨论】:

以上是关于在应用程序启动时在后台加载 UIViews的主要内容,如果未能解决你的问题,请参考以下文章

启动 Core Data 应用程序时在后台配置 NSFetchedResultsController

Firebase 应用程序在从后台激活时在启动时崩溃

加载不同的纵向/横向 UIViews

Android 连接时在后台发送数据

如何在启动时在后台运行django服务器?

iOS将UIViews数组保存到文件然后重新加载