Iphone 如何使用NSUserDefaults从一个视图读取值到另一个视图?
我使用NSUserDefaults来存储一个值。我在NSUserDefaults中存储一些整数值,如第一个视图中所示 我在接口文件中声明如下Iphone 如何使用NSUserDefaults从一个视图读取值到另一个视图?,iphone,Iphone,我使用NSUserDefaults来存储一个值。我在NSUserDefaults中存储一些整数值,如第一个视图中所示 我在接口文件中声明如下 NSUserDefaults *prefs; @property(nonatomic,retain) IBOutlet NSUserDefaults *prefs; 然后我在类文件中使用如下 @synthesize passwordfield,prefs; 此处passwordfield是UITextField的名称 NSInteger
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]
即可,而无需到处声明属性。