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;
}

代码借自:save class in NSUserDefaults

**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");
    }

}