0

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

我的应用程序中有多个视图控制器,其中一个是“选项”视图,用户可以在其中通过分段控件更改某些设置,例如背景颜色。单击后,用户单击一个按钮将他们的偏好颜色保存到 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;

这完全按照我的意愿工作,但我无法让它在我的其他视图中工作。谁能帮我解决我似乎缺少的东西?非常感谢

4

2 回答 2

2

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

于 2014-01-14T10:34:42.537 回答
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"];
    }

希望这对您有所帮助。

于 2014-05-06T13:30:30.450 回答