在整个iOS应用程序中共享string和variables

我正在为类的最终项目做一个应用程序,我需要在应用程序的不同视图中共享string,整数和浮点数。 我必须创build一个侍应生在工作中使用的应用程序。 对于不同types的物品(饮料,开胃菜,主菜等),我需要不同的意见,并且需要保持所select的物品,每个物品的价格和数量可以通过不同的视图进行访问,从而在每个视图中保持可用的总量每种types的项目都有一个视图),最后是一个视图,显示一个项目列表以及总数。

根据我的理解,我不想使用标签栏应用程序布局,因为通常用户不希望信息在不同的选项卡视图之间是相同的,所以我正在考虑为此使用分段控制器。 为了得到string,视图之间共享的整数和浮点数可以在AppDelegate中声明它们? 我读过,我可以使用单身人士,但我们没有在我的课上覆盖,所以我认为这可能会增加更多的复杂性,比我需要的。 如果我要在AppDelegate中声明它们,我将不得不在AppDelegateViewController.m综合它们以使它们始终可用? 我无法想象我必须为每个不同的ViewController综合它们。 或者NSUserDefaults是否适合这种情况呢?

如果我在AppDelegate中声明了一个实例variables,实际上它将成为一个全局variables? 我知道这是对封装的做法,但这不会对这个应用程序有很大的不同,它不会在应用程序商店和开销不应该有很大的区别考虑这将是一个相对较小的应用程序。

在此先感谢大家。 祝你好运,如果你仍然有他们的决赛!


编辑


我想我应该说,这将是一个蹩脚的,糟糕的应用程序,我们没有涉及很多更高级的主题,如iOS的MVC范例,所以我相当有限,我可以做什么相比我们应该做的。 愚蠢的class级,我真的很遗憾的注册,当我真的可以自己去做这件事,并更好地了解Objective-C,我们什么都没有教,Objective-C更好地了解iOS框架。

基本上,如果我在AppDelegate声明variables,即使这是一个失误,是否可以从不同的视图访问string等? 或者NSUserDefaults在这种情况下是一个更好的解决scheme? 我倾向于NSUserDefaults并在项目ViewController声明它们。

正如hotpaw2所说,使用独特的模型是最好的select。

但是,因为这是一个小应用程序(当你正在学习基础知识时),在应用程序委托中实现这些variables不会有什么影响,而且可能更容易一些。

如果应用程序增长,那么您可能需要将模型移出应用程序委托并将其移到自己的类中。

一个更容易和更简单的方法是将这些less量的数据存储在nsuserdefaults中:

保存到nsuserdefaults:

 [[NSUserDefaults standardUserDefaults] setObject:howManyDrinks forKey:@"howManyDrinks"]; [[NSUserDefaults standardUserDefaults] synchronize]; 

从nsuserdefaults中检索:

 NSString *howManyDrinks = [[NSUserDefaults standardUserDefaults] objectForKey:@"howManyDrinks"]; 

典型的Objective C MVC解决scheme是将所有相关的共享string和variables放入一个Model对象(为这个对象创build一个新的类)作为属性。 然后与所有需要访问这些variables或string的控制器共享该Model对象。

使用AppDelegate作为模型对象是“过度共享”,并与非委托相关的东西混乱了应用程序委托。 稍微干净的解决scheme是让应用程序委托持有一个getter到模型对象,广泛使用的应用程序。 一个可能导致代码重用问题的解决scheme,在其他方面被认为是政治上不正确的,是将模型对象和/或共享variables本身分配给C全局variables(小心保留)。 (但是,如果你关心这些事情,这通常会产生最快和最小的代码量。)

您可以利用目标C中使用协议的委托模式的function。

您也可以将这些值存储在plist中,然后可以从应用程序的任何位置访问和编辑这些值。 比单身人士更容易实施。 而且,由于您可以在XCode中直观地设置plist,所以对于初学者来说相对容易。 我甚至为我的plist创build了一个包装器来简化数据的编辑。 这是一个plists的教程。

我不是这方面的专家,但我一直在使用一个单身人士,里面有一个对象。 据我所知,该对象内的值是被保留的。 要创build一个单例,你可以这样做:

创build一个普通的对象,并将其添加到头文件中:

 + (id)sharedManager; 

然后在.m文件中添加这个:

 + (id)sharedManager { static SharedInfo *sharedMyManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedMyManager = [[self alloc] init]; }); return sharedMyManager; } - (id)init { if (self = [super init]) { self.myStuff = [[NSMutableDictionary alloc]init]; //This is where you initialise your variables. The example above is for a //property that I have declared in the .h file } return self; } 

然后,在整个你的应用程序,你会使用这个:

 [[[SharedInfo sharedManager] myStuff] addObject: SomethingTocreate]; 

确保在要使用的ViewController中包含SharedInfo.h。

我希望这有助于。