我使用 NSUserDefaults 来存储值。我在 NSUserDefaults 中存储一些整数值,如第一个 View 中所示。
我在接口(interface)文件中声明如下..
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);
然后我使用导航 Controller 移至下一个 View 。
但是我无法从第一个 View 中读取 NSUserDefaults 的值。
我在第二个 View 中使用了如下代码。
PasswordCheckViewController *nextController = [[PasswordCheckViewController alloc] initWithNibName:@"PasswordCheckViewController" bundle:nil];
NSLog(@"Pass in Next: %d",[nextController.prefs integerForKey:@"integerKey"]);
但是输出如下。
Pass in Next: 0
如何使用 NSUserDefaults 获取从第一个 View 到第二个 View 的值?
最佳答案
您所做的事情是错误的,NSUserDefaults
不是 IBOutlet
,IBOutlet
用于引用 InterfaceBuilder 控件。
NSUserDefault
通常用于存储一些首选项值。
通常,您可以通过调用 standardUserDefaults
类方法来获取 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。
您可以从应用程序内的任何类访问该对象的值
关于iphone - 如何使用 NSUserDefaults 从一个 View 读取值到另一个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268394/