使用应用程序委托启动 iOS 应用程序 [关闭]

Posted

技术标签:

【中文标题】使用应用程序委托启动 iOS 应用程序 [关闭]【英文标题】:Using the app delegate to start an iOS app [closed] 【发布时间】:2013-10-21 17:15:10 【问题描述】:

我想知道我是否应该减少对项目的 App Delegate 的依赖来设置我的应用 - 或者这种代码是否应该属于模型的单例类部分?

例如 - 假设在我的用户进入第一个视图之前 - 我需要应用程序从服务器下载一些数据,并且我需要执行一些检查并创建一个 BaseDataStore 类型的类来存储应用程序的内容下载。这一切都在我的应用程序启动之前完成。

将所有这些代码放入 applicationDidFinishLaunchingWithOptions 似乎是正确的做法 - 因为这是在应用启动后调用的内容。我的问题:这是放置它的正确位置吗?还是我为这类事情创建自己的课程?

【问题讨论】:

我建议有一个 VC 在完成后执行“等待”(下载数据)进入您的“正常”视图控制器。在您的 AppDelegate 中,您只是想知道您是否已经有了初始数据并转到“正在下载的 VC”或“正常”的 VC。 【参考方案1】:

简而言之:是的,您需要创建自己的类。

将所有代码放在 AppDelegate 和 ViewController 类中是 ios 中的一种流行习惯。 iOS 应用程序往往具有小型(自动生成)模型类,然后从 ViewControllers 或 AppDelegate 进行管理。这是创建放屁应用程序之类的最快方法。

如果您要构建比放屁应用程序更大的东西,我建议采用不同的方法:管理器类可能会更改您的模型(设置、保存等)。 AppDelegate 然后在需要时调用模型管理器。此外,当“应用程序逻辑”放置在模型类中时,应用程序代码通常会得到改进。为了适应模型更改(并重新生成模型类),自动生成的 ManagedObjects 应通过包含“应用程序逻辑”的类别进行扩展。

【讨论】:

+1 -- 保持控制器层精简。使用真正的分离 @Daij-Djan - 谢谢大家 - 我正在开始一个大型 iOS 项目,它将涉及大量网络/XML 解析和 Web 服务。在用户进入第一个屏幕之前,我需要做一些检查并创建一些东西 - 还需要下载数据并在此之前准备好它。所以我希望我的代码为每个部分分开。我该怎么做 - 我可以使用 App Delegates 来调用其他类的方法来启动吗?感谢反馈! P.S 我在哪里可以找到有关 ios 应用架构最佳实践的最佳前进方式?【参考方案2】:

对于从网络加载数据的简单项目,您的流程应该是:

    创建自定义 LoadingViewController 从 AppDelegate 显示它applicationDidFinishLaunchingWithOptions 通过实体管理器获取数据 通过回调(委托模式应该不错)根据您的数据启动第一个视图控制器

前 2 个步骤用于向用户显示正在加载的应用数据(如果不这样做,Default.png 会显示很长时间)。如果第一个 ViewController 数据可以刷新,可以直接加载,先显示缓存数据,然后启动刷新。

【讨论】:

好吧,当应用程序启动时,我需要做这样的事情:1.检查用户之前是否在此设备上启动过应用程序2.根据上述执行操作(登录信息,协议页面,等) 3. 初始化一个 dataStore 类 4. 下载一些数据并解析它 5. 继续启动应用程序的其余部分.. 我看过另一个开发人员完成的一个旧项目 - 所有的启动内容和检查在 applicationDidFinishLaunchingWithOptions 中完成,该方法非常大。我还能用那个方法调用方法/开始从其他类下载东西吗? 是的,初始应用流程可以直接写在applicationDelegate中,但只能写逻辑。如果(用户已启动) 调用此控制器; else 调用另一个; 。然后您的控制器可以通过您的管理器类获取数据。 太棒了。谢谢你们的帮助!我今天会在这个主题上做更多的阅读。

以上是关于使用应用程序委托启动 iOS 应用程序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要在一个视图控制器中使用委托? [关闭]

应用在前台运行时收到 iOS 推送通知

如何创建模式视图,用于在 iOS 中启动应用程序?

iOS Swift:闭包(回调)与委托,何时使用? [关闭]

使用 Xcode 7、iOS 9 运行项目时出现“应用程序窗口应在应用程序启动结束时具有根视图控制器”错误

如何使用委托从数据源中删除对象