我正在为类(class)的期末项目制作一个应用程序,我需要在应用程序的不同 View 中共享字符串、整数和 float 。我必须创建一个服务员/女服务员在工作中使用的应用程序。我需要为不同类型的商品(饮料、开胃菜、主菜等)提供不同的 View ,并且需要保持所选商品、价格和每个商品的数量可供不同的 View 访问,以保持每个 View 中的运行总计可用(每种类型的项目一个 View ),最后一个 View 显示订购商品的逐项列表加上总数。
据我了解,我不想使用选项卡栏应用程序布局,因为通常用户不希望不同选项卡式 View 之间的信息相同,因此我正在考虑为此使用分段 Controller 。要获取在 View 之间共享的字符串、整数和 float ,可以在 AppDelegate 中声明它们吗?我读过我可以使用单例,但我们没有在我的类里面讨论过它,所以我认为这可能只会增加比我需要的更多的复杂性。如果我要在 AppDelegate 中声明它们,我是否必须在 AppDelegateViewController.m
中合成它们以使它们始终可用?我无法想象我必须为每个不同的 ViewController 合成它们。或者 NSUserDefaults
是否适合这种情况?
如果我在 AppDelegate 中声明了一个实例变量,是否会使其成为一个全局变量?我知道这违反封装实践,但这不会对这个应用程序产生太大影响,它不会出现在 App Store 中,考虑到这将是一个相对较小的应用程序,开销应该不会产生太大影响.
提前谢谢大家。如果决赛临近,祝你好运!
编辑
我想我应该说这将是一个笨拙、糟糕的应用程序,我们没有涵盖很多更高级的主题,例如 iOS 的 MVC 范例,所以我对什么非常有限与我们应该做的相比,我能做的。愚蠢的类(class),当我真的可以自己做这件事并更好地理解 Objective-C 时,我后悔报名参加了,我们什么也没教过,并且更好地理解了 iOS 框架。
基本上,如果我在 AppDelegate
中声明变量,即使这是一个失礼,是否可以从不同的 View 访问字符串等?或者在这种情况下 NSUserDefaults
是更好的解决方案吗?我倾向于 NSUserDefaults 并在项目 ViewController
中声明它们。
最佳答案
典型的 Objective C MVC 解决方案是将所有相关的共享字符串和变量作为属性放入模型对象(为此对象创建一个新类)。然后与需要访问这些变量或字符串的所有 Controller 共享该模型对象。
将 AppDelegate 用作模型对象是“过度共享”,并且会用与委托(delegate)无关的内容弄乱应用委托(delegate)。一个稍微简洁的解决方案是让应用程序委托(delegate)持有一个 getter 到在整个应用程序中广泛使用的模型对象。一种可能导致代码重用问题并且被认为政治上不正确的解决方案是将模型对象和/或共享变量本身分配给 C 全局变量(小心保留)。 (但如果您关心这些事情,这通常会生成最快和最少的代码量。)
关于iphone - 在整个 iOS 应用程序中共享字符串和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477827/