【问题标题】:can my app delegate be used as a controller of UIViewControllers (MVC)我的应用程序委托可以用作 UIViewControllers (MVC) 的控制器吗
【发布时间】:2013-03-12 13:49:17
【问题描述】:

应用代理能否充当整个应用的所有 UIViewController 之间的粘合剂?

我正在创建一个邮件客户端,其导航结构非常类似于sparrow(和 fb 等)。第一个屏幕将是一个登录屏幕.. 然后将导致一个UITableViewController 具有famous 左侧菜单按钮,如果单击它会显示下面的其他 VC。

长话短说,现在是我的应用程序代表在运行这个节目。它决定是否在第一次访问时显示登录屏幕,或者默认邮箱及其subviews。如果我从一个子视图中获取信息,它会将该信息传递给应用程序委托,后者又将其传递给其他视图控制器。

从 MVC 的角度来看,这是正确的吗?我知道应用程序代表是第一个联系点,它是启动应用程序的原因,但我还没有看到它广泛使用它。我只是想确定我是否在此处遵循 iOS MVC 最佳实践。

【问题讨论】:

  • 不,这不是一个好主意。应用程序委托是放置通知、库初始化代码的地方,但仅此而已!使用故事板和其他更新的objective-c 功能来管理您的控制器层次结构。
  • 不是完全重复的,但在这里stackoverflow.com/q/9213134/97337stackoverflow.com/a/829591/97337 回答(简短的回答是不,这不是正确的MVC)
  • 我正在建立一个旧图书馆,该图书馆是在故事板时代之前创建的......它有大约 50 个 xibs.. 将所有这些转换为故事板本身就是一个新项目。您能否更具体地介绍一下 Objective-c 的其他新功能?希望我仍然可以在基于 xib 的项目中使用的东西..
  • @RobNapier 复习答案.. 似乎这件事不像看起来那么黑白分明.. 我发现this 的答案特别有趣,包括实现协议和IBOutlets 等。 . 你对这种范式有强烈的感觉吗?
  • 另一个准则:如果任何实现文件超过 500 行,您应该强烈询问它是否做得太多。在我的经验中,AppDelegate 是最常见的,超过 500 行,因此受到最严格的审查。

标签: ios objective-c model-view-controller design-patterns uinavigationcontroller


【解决方案1】:

不建议这样做,但这样做是完全合法的。我通常使用主视图控制器类并在其中完成大部分繁重的工作。请记住,如果您使用 Core Data,XCode 会将大部分自动生成的代码转储到应用程序委托中,因此如果您使用 Core Data,导航可能会有些困难。不过,这实际上只是个人喜好。如果是我,我仍然会让应用代理执行登录屏幕与主屏幕逻辑,但将大部分应用逻辑放在主屏幕控制器中。

【讨论】:

  • 投反对票的人:你能解释一下为什么你认为这个答案值得投反对票吗?
  • 是的,我可以。原因是对大量胶水代码使用应用程序委托会导致难以维护、草率的代码,您应该在哪里使用故事板或完全使用其他设计模式。
  • @RichardJ.RossIII 我确实建议 OP 这样做。再次阅读我的答案。我什至提到我自己将代码分开,但我只是评论说,如果有人坚持这样做,它不会破坏任何东西,这不是我(或显然是你)会这样做的方式。
  • @RichardJ.RossIII 我澄清了我回答的精神。希望这会有所帮助。
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多