Xcode在多个viewcontrollers中加载NSUserDefaults

时间:2014-01-14 10:26:26

标签: ios nsuserdefaults multiple-views

我做了彻底的研究,但似乎没有找到我正在寻找的答案。希望有人可以提供帮助。

我的应用程序中有多个视图控制器,其中一个是“选项”视图,用户可以通过分段控件更改某些设置,如背景颜色。单击后,用户单击按钮将其首选项颜色保存到NSUserDefaults。这非常有效,下次应用程序打开时,仍会选择正确的颜色。但仅限于选项视图控制器。

如何在我的其他视图控制器中加载所选的背景颜色?我似乎没有通过将其实现到我的其他视图的ViewDidLoad来运行它,就像我在选项视图中所做的那样(见下文)。

我在options.m中的代码如下:

- (IBAction)changeColor {
    switch (colorControl.selectedSegmentIndex) {
        case 0:
            [colorView setBackgroundColor:[UIColor redColor]];
            break;
        case 1:
            [colorView setBackgroundColor:[UIColor blackColor]];
            break;
        case 2:
            [colorView setBackgroundColor:[UIColor brownColor]];
            break;  
        default:
            break;
    }
}

- (IBAction)saveDefaultColor {
    int defaultColorInteger = colorControl.selectedSegmentIndex;

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:defaultColorInteger forKey:@"defaultColor"];
    [userDefaults synchronize];
 }

以上是控制和保存按钮。在我的ViewDidLoad中,我包括以下内容:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
int defaultColorInteger = [userDefaults integerForKey:@"defaultColor"];

[colorControl setSelectedSegmentIndex:defaultColorInteger];

switch (colorControl.selectedSegmentIndex) {
    case 0:
        [colorView setBackgroundColor:[UIColor redColor]];
        break;
    case 1:
        [colorView setBackgroundColor:[UIColor blackColor]];
        break;
    case 2:
        [colorView setBackgroundColor:[UIColor brownColor]];
        break;

    default:
        break;

这完全符合我的要求,但我无法在其他视图中使用它。 任何人都可以帮我解决我似乎失踪的事情吗?非常感谢

2 个答案:

答案 0 :(得分:2)

我认为您需要检查其他视图中的键值,因为NSUserDefaults不是为单个视图保存整个应用程序的数据。可能是你没有正确地放钥匙。

答案 1 :(得分:0)

在任何ViewController中创建NSUserDefault对象,并将键值对设置为userDefault对象中的对象。

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    if (standardUserDefaults)
    {
        [standardUserDefaults setObject:@"stringUserName" forKey:@"UserName"];
        [standardUserDefaults setObject:@"idfv" forKey:@"DeviceCode"];
        [standardUserDefaults synchronize];
    }

然后要从第二个ViewController访问它,你必须在第二个ViewController中编写下面的代码

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    NSString *userName;
    NSString *deviceCode;
    if (standardUserDefaults) 
    {
        userName = (NSString*)[standardUserDefaults objectForKey:@"UserName"];
        deviceCode = (NSString*)[standardUserDefaults objectForKey:@"DeviceCode"];
    }

希望这对你有所帮助。