我想知道NSUserDefaults对象是否是共享的,可以从app委托中以及我的几个视图控制器中访问。基本上我需要来自app delegate的数据来回传递给视图控制器。我不想使用单身人士。我想知道NSUserDefauflts对象是否是一种方法。
如果可以,我如何初始化对象以便可能?
谢谢!
答案 0 :(得分:8)
如果您只使用[NSUserDefaults standardUserDefaults]
,则每次都会返回相同的实例。然后,不同的类可以使用它来存储跨会话持久的数据。
如果您只是尝试在应用程序的各个部分之间传递数据,而不是存储它,则用户默认值不是这样做的合适方式。您应该在类上公开方法或属性,这些方法或属性将您需要传递的数据作为输入。
答案 1 :(得分:3)
嗯,但事实并非如此。正常的设计模式是“手动”在视图控制器之间来回传递对象。您希望视图控制器与应用程序的其余部分尽可能独立 - 可重用。将它们绑定到NSUserDefaults
并不是一个很好的方法!
答案 2 :(得分:2)
您不应该在应用代理中进行任何处理。理想情况下,您应该初始化窗口,根视图控制器(如果不是通过故事板进行)和模型,那就是它。所有处理都应在其他地方完成(主要是在与模型类交谈的视图控制器中)。
使您的根模型类成为单身,以便所有视图控制器都可以通过您选择的界面与之交谈。
制作单身并不难:
@interface MyModel: NSObject
+ (MyModel *)sharedModel;
@end
和实施:
@implementation MyModel
+ (MyModel *)sharedModel
{
static MyModel* modelSingleton = nil;
static dispatch_once_t once;
dispatch_once(&once, ^{
modelSingleton = [[MyModel alloc] init];
});
return modelSingleton;
}
@end
然后你只需使用:
[MyModel sharedModel]
访问它。