Objective C - 在 NSUserDefaults 中保存一个变量
Objective C - Saving a variable inside NSUserDefaults
我有一个名为 "EntityType" 的 class,它有一个字符串 "name",我正在使用 NSUserDefaults 保存它,所以我尝试了这个:
if (button.selected)
{
[button setSelected:YES];
[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"];
}
我想从另一个 class 访问变量并将其保存在 NSUserDefaults
中
您错过了同步 call.Apply 保存它。
if (button.selected)
{
[button setSelected:YES];
[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
稍后取回
NSNumber* savedValue = [[NSUserDefaults standardUserDefaults]
objectForKey:@"buttonSelected"];
这适用于您只想存储值的情况。
如果您想存储自定义对象,请查看此 link
How to store custom objects in NSUserDefaults
您可以获得 NSNumber
对象,例如,
NSNumber *num = [[NSUserDefaults standardUserDefaults] objectForKey:@"buttonSelected"];
从应用程序中的任何位置。
在您的 EntityType class 上,实现以下两种编码和解码方法(与您自己的对象相关的东西):
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.name forKey:@"name"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.name = [decoder decodeObjectForKey:@"name"];
}
return self;
}
从NSUserDefaults
读取和写入:
- (void)saveCustomObject:(MyObject *)object key:(NSString *)key {
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:encodedObject forKey:key];
[defaults synchronize];
}
- (MyObject *)loadCustomObjectWithKey:(NSString *)key {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [defaults objectForKey:key];
MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
return object;
}
**ViewController.h**
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
//here i took one userdefault property
@property(strong,nonatomic)NSUserDefaults *user;
@end
**ViewController.m**
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//after the property declaration take standard user defaults
_user = [NSUserDefaults standardUserDefaults];
//here i took Bool and key you can take any thing but took my_val
[_user setBool:YES forKey:@"my_val"];
}
// this is button action
- (IBAction)submit:(id)sender
{
//for bool i am checking the condition given above
if ([_user boolForKey:@"my_val"])
{
**enter code here**
NSLog(@"values is set to yes");
}
else
{
**enter code here**
NSLog(@"Value is set to No");
}
}
我有一个名为 "EntityType" 的 class,它有一个字符串 "name",我正在使用 NSUserDefaults 保存它,所以我尝试了这个:
if (button.selected)
{
[button setSelected:YES];
[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"];
}
我想从另一个 class 访问变量并将其保存在 NSUserDefaults
中您错过了同步 call.Apply 保存它。
if (button.selected)
{
[button setSelected:YES];
[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
稍后取回
NSNumber* savedValue = [[NSUserDefaults standardUserDefaults]
objectForKey:@"buttonSelected"];
这适用于您只想存储值的情况。 如果您想存储自定义对象,请查看此 link How to store custom objects in NSUserDefaults
您可以获得 NSNumber
对象,例如,
NSNumber *num = [[NSUserDefaults standardUserDefaults] objectForKey:@"buttonSelected"];
从应用程序中的任何位置。
在您的 EntityType class 上,实现以下两种编码和解码方法(与您自己的对象相关的东西):
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.name forKey:@"name"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.name = [decoder decodeObjectForKey:@"name"];
}
return self;
}
从NSUserDefaults
读取和写入:
- (void)saveCustomObject:(MyObject *)object key:(NSString *)key {
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:encodedObject forKey:key];
[defaults synchronize];
}
- (MyObject *)loadCustomObjectWithKey:(NSString *)key {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [defaults objectForKey:key];
MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
return object;
}
**ViewController.h**
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
//here i took one userdefault property
@property(strong,nonatomic)NSUserDefaults *user;
@end
**ViewController.m**
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//after the property declaration take standard user defaults
_user = [NSUserDefaults standardUserDefaults];
//here i took Bool and key you can take any thing but took my_val
[_user setBool:YES forKey:@"my_val"];
}
// this is button action
- (IBAction)submit:(id)sender
{
//for bool i am checking the condition given above
if ([_user boolForKey:@"my_val"])
{
**enter code here**
NSLog(@"values is set to yes");
}
else
{
**enter code here**
NSLog(@"Value is set to No");
}
}