从多个视图访问NSUserDefault

时间:2011-06-01 21:35:01

标签: ios xcode views nsuserdefaults

我正在尝试从多个视图访问名为prefs的NSUserDefault。我在一个视图中分配prefs但我不知道如何访问它而不需要在第二个视图中重新分配新的NSUserDefault。

另外,我的操作系统是ios。

这是我的FlipSideViewController功能:

我的FlipSideViewController中的函数:'NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

- (IBAction) changeRate:(id)sender {

if (rate.selectedSegmentIndex == 1){
    [prefs setInteger:1 forKey:@"myRate"];//save

}
else if (rate.selectedSegmentIndex == 2){
    [prefs setInteger:2 forKey:@"myRate"];//save
}
[[NSUserDefaults standardUserDefaults] synchronize];
};

这是MainViewController函数:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// [prefs setValue: @"0" forKey: @"myRate"];

if (!([prefs valueForKey: @"myRate"])){
    [prefs setInteger:0 forKey: @"myRate"];
}

[prefs setInteger:2 forKey: @"myRate"];

int rateOption = [[prefs valueForKey: @"myRate"] intValue];

if (rateOption == 1)
{
    dayOrHourly.text = @"% of Day:";
    percentOrHours.hidden = YES;
    hours.hidden = YES;
    dayPercentage.hidden = NO;
}
else if (rateOption == 2)
{
    dayOrHourly.text = @"# of Hours:";
    percentOrHours.hidden = NO;
    dayPercentage.hidden = YES;
}

2 个答案:

答案 0 :(得分:4)

为不同的视图设置多个prefs应该不是问题。只需致电

[prefObject synchronize];

当您在一个视图中修改其中一个NSUserDefaults实例或尝试从另一个视图访问它们时,您会没事的。

但是,如果您真的希望在所有视图控制器之间共享一个对象,请将其放在App Delegate中。 [我必须说,我不明白这一点......]

答案 1 :(得分:3)

NSUserDefaults是一个单身人士类。你没有分配它的实例,你正在访问它。

那就是说,您是否尝试过使用objectForKey代替valueForKey?值不能返回值(... valueForKey] intValue];),而对象确实返回值。

此外,我也是这样做的。

首先,我在全局标题中定义一个常量,如下所示:

#define kSettings [NSUserDefaults standardUSerDefaults];

然后,你应该可以在视图中访问NSUserDefaults

[kSettings setObject:@"This is a test." forKey:@"TestString"];

读出字符串,你会这样做:

[kSettings objectForKey:@"TestString"];

我建议定义一些“全局常量”来访问存储在NSUserDefaults中的对象。例如:

#define kTestString [kSettings objectForKey:@"TestString"];