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

Iphone 如何使用NSUserDefaults从一个视图读取值到另一个视图?,iphone,Iphone,我使用NSUserDefaults来存储一个值。我在NSUserDefaults中存储一些整数值,如第一个视图中所示 我在接口文件中声明如下 NSUserDefaults *prefs; @property(nonatomic,retain) IBOutlet NSUserDefaults *prefs; 然后我在类文件中使用如下 @synthesize passwordfield,prefs; 此处passwordfield是UITextField的名称 NSInteger

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

我在接口文件中声明如下

NSUserDefaults *prefs;
    @property(nonatomic,retain) IBOutlet NSUserDefaults *prefs;
然后我在类文件中使用如下

   @synthesize passwordfield,prefs;
此处passwordfield是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从第一个视图到第二个视图获取值?

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

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

您所做的是错误的,
NSUserDefaults
不是
IBOutlets
,一个
IBOutlets
用于引用InterfaceBuilder控件

NSUserDefault
通常用于存储某些首选项值。
通常,通过调用
standardUserDefaults
class方法来使用
NSUserDefaults
类来获取NSUserDefaults对象。此方法返回已初始化搜索列表的全局
NSUserDefaults
对象。使用
objectForKey:
setObject:forKey:
方法获取和设置默认值。请注意,默认值只能是属性列表对象:
NSData
NSString
NSNumber
NSDate
NSArray
,或
NSDictionary

在本例中,您正在创建一个不需要的
IBOutlet
。你喜欢这样吗

  NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
  NSInteger myInteger = [passwordfield.text integerValue];
  [prefs setObject:myInteger forKey:@"integerKey"];
  NSInteger myInt = [prefs objectForKey:@"integerKey"];
这将为您提供一个同步的
NSUserDefaults
,这样您就不需要将任何内容存储为ivar。

您可以从应用程序中的任何类访问对象的值

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

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

“prefs”是如何设置的,在哪里声明?为什么只说
nextController.prefs
,而不说
prefs
?如果prefs是PasswordCheckViewController的一个属性,它是如何初始化的?您好,我现在编辑我的问题。。请帮帮我。。如何使用NSUserDefaults从一个视图到另一个视图获取值。为什么prefs是IBOutlet?您只需使用
[NSUserDefaults standardUserDefaults]
即可,而无需到处声明属性。