aboodmanna
aboodmanna

Reputation: 31

Objective C - Saving a variable inside NSUserDefaults

I have a class called "EntityType" that has a string "name" and I am using NSUserDefaults to save it so I tried this:

if (button.selected)
{
    [button setSelected:YES];
    [[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"];
}

I want to access the variable from another class and save it inside NSUserDefaults

Upvotes: 0

Views: 4210

Answers (4)

Durga Viswanadh
Durga Viswanadh

Reputation: 1

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

}

Upvotes: 0

Viraj Padsala
Viraj Padsala

Reputation: 1398

On your EntityType class, implement the following two methods for encoding and decoding (something relevant to your own object):

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

Reading and writing from 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;
}

Code borrowed from: save class in NSUserDefaults

Upvotes: 0

l.vasilev
l.vasilev

Reputation: 930

You have missed sync call.Apply this to save it.

if (button.selected)
{
    [button setSelected:YES];
    [[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"];
     [[NSUserDefaults standardUserDefaults] synchronize];

}

to get it back later

NSNumber* savedValue = [[NSUserDefaults standardUserDefaults]
    objectForKey:@"buttonSelected"];

This is if you want to store only the value. If you want to store your custom object look at this link How to store custom objects in NSUserDefaults

Upvotes: 2

Ketan Parmar
Ketan Parmar

Reputation: 27428

You can get NSNumber object like,

 NSNumber *num =  [[NSUserDefaults standardUserDefaults] objectForKey:@"buttonSelected"];

from anywhere in the app.

Upvotes: 0

Related Questions