可以在多个视图中读取存储在NSUserDefaults中的值

时间:2014-04-16 12:10:38

标签: ios objective-c nsuserdefaults

是否可以从多个视图中读取存储在NSUserDefaults中的值,或者只读取一次,然后使用其他方法将数据传递到应用的不同部分?

换句话说,我想知道我是否正确行事,我正在处理的应用程序中正在进行的工作基本上是保存了几个NSIntegers和NSStrings(每个只有两个或三个) NSUserDefaults,然后我正在我的应用程序的不同部分(不同的视图)阅读这些值,但我想知道这是一个常见的做法还是我应该做一些不同的事情,在应用程序的某处读取值然后尝试使用将该数据传递给其他视图的另一种方法。我想学习最好的编程实践,就是这样。

在应用的多个部分中使用NSUserDefaults值时,最常见的做法是什么?

FYI, 我熟悉在视图控制器之间传递数据的多种方法,例如,delegation,prepareForSegue等。

非常感谢。

3 个答案:

答案 0 :(得分:2)

我还建议多次阅读,不要引入另一层来保存数据。 最重要的方面是数据的实际情况,可能会在不同的调用之间发生变化。

答案 1 :(得分:1)

可以在多个位置读取甚至将值写入NSUserDefault,但是更好的做法是使用全局机制(如单例模式)来读写UserDefaults。这样你就可以保证完全同步的值。您需要做的就是创建一个新类并添加一些 Class 方法来从NSUserDefaults读取和写入值。

答案 2 :(得分:1)

没关系,当你调用[NSUserDefaults standardUserDefaults]时,它会返回相同的对象,无论你是在应用程序的各个地方传播调用,还是将访问封装在一个类中。

我更喜欢后者,因为它允许您拥有更多可读代码(和其他好处):

BOOL hasX = [TLPSettings hasPreferenceX];
if (hasX) {
    [TLPSettings setY:YES];
}

VS

BOOL hasX = [[NSUserDefaults standardUserDefaults] boolForKey:@"hasX"];
if (hasX) {
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasY"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

您可以轻松更改首选项键(无需为其定义适应症),更改首选项的验证或逻辑,而无需在任何地方搞乱,轻松调试其用法或流氓值,将其全部或部分存储在其他位置等等。

TLP是你的三个字母前缀。