如何使用NSUserDefaults从一个视图到另一个视图读取值?

时间:2010-11-24 15:21:51

标签: iphone

我使用NSUserDefaults来存储值。我在NSUserDefaults中存储了一些整数值,如下面的第一个视图中所示。

我在接口文件中声明如下..

NSUserDefaults *prefs;
    @property(nonatomic,retain) IBOutlet NSUserDefaults *prefs;

然后我在课堂文件中使用如下

   @synthesize passwordfield,prefs;

这里的密码字段是UITextField的名称

NSInteger myInteger = [passwordfield.text integerValue];
[prefs setInteger:myInteger forKey:@"integerKey"];
[prefs synchronize];
NSInteger myInt = [prefs integerForKey:@"integerKey"];
NSLog(@"My integer Value: %d",myInt);

然后我使用导航控制器移动到下一个视图。

但我无法从第一个视图中读取NSUserDefaults的值。

我在第二个视图中使用了如下代码。

PasswordCheckViewController *nextController = [[PasswordCheckViewController alloc] initWithNibName:@"PasswordCheckViewController" bundle:nil];
NSLog(@"Pass in Next: %d",[nextController.prefs integerForKey:@"integerKey"]);

但输出如下。

 Pass in Next: 0

如何使用NSUserDefaults从第一个视图获取第二个视图的值?

3 个答案:

答案 0 :(得分:4)

您正在做的是错误的,NSUserDefaults不是IBOutletsIBOutlet用于引用InterfaceBuilder控件。

NSUserDefault通常用于存储一些偏好值 通常,您通过调用NSUserDefaults类方法来使用standardUserDefaults类来获取NSUserDefaults对象。此方法返回一个全局NSUserDefaults对象,其搜索列表已初始化。使用objectForKey:setObject:forKey:方法获取和设置默认值。请注意,默认值的值只能是属性列表对象:NSDataNSStringNSNumberNSDateNSArrayNSDictionary
   在您的情况下,您正在创建一个不需要的IBOutlet。这样做

  NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
  NSInteger myInteger = [passwordfield.text integerValue];
  [prefs setObject:myInteger forKey:@"integerKey"];
  NSInteger myInt = [prefs objectForKey:@"integerKey"];

这将为您提供同步NSUserDefaults,这样您就不需要将任何东西存储为ivar 您可以从应用程序内的任何类访问对象的值

答案 1 :(得分:1)

您正在混合视图和视图控制器。因此,您可以从导航控制器获取所需的视图控制器,并在视图未卸载的情况下从中获取所需的视图。 例如,如果self是第二个视图控制器,并且您想要从第一个视图控制器读取:

MyFirstViewController *vc = (MyFirstViewController*)[self.navigationController.viewControllers objectAtIndex: indexOfFirst];
// ... now copy your prefs from first to second
self.prefs = vc.prefs;

答案 2 :(得分:0)

在需要使用NSUserDefaults获取值的函数中使用此代码:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSInteger myInt = [prefs integerForKey:@"a"];