1

我想知道 NSUserDefaults 对象是否是共享的,并且可以从应用程序委托以及我的几个视图控制器中访问。基本上我需要从应用程序委托来回传递数据到视图控制器。我不想使用单例。我想知道 NSUserDefauflts 对象是否是一种方法。

如果这是可能的,我将如何初始化对象以使其成为可能?

谢谢!

4

3 回答 3

8

如果只使用[NSUserDefaults standardUserDefaults],每次都会返回相同的实例。然后不同的类可以使用它来存储跨会话持久的数据。

如果您只是尝试在应用程序的各个部分之间传递数据,而不是存储它,那么用户默认值不是这样做的适当方式。您应该在您的类上公开方法或属性,这些方法或属性将您需要传递的数据作为输入。

于 2012-08-13T18:25:06.223 回答
3

嗯,它是,但这并不是它的设计目的。正常的设计模式是“手动”在视图控制器之间来回传递对象。您希望您的视图控制器尽可能独立于应用程序的其余部分——可重用。把它们绑起来NSUserDefaults不是一个好方法!

于 2012-08-13T18:25:25.380 回答
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]

访问它。

于 2012-08-13T18:35:04.783 回答