How to use UISwitch with NSUserDefault - ios

defaults = [NSUserDefaults standardUserDefaults];
NSLog(#"%#",[defaults objectForKey:#"firsttime"])
if([[defaults objectForKey:#"firsttime"]isEqualToString:#"YES"])
{
UISwitch *onoff = (UISwitch *) sender;
if(onoff.on)
{
NSLog(#"yes on1 facebookswitch");
facebookSwitch.on = YES;
[userDefault setValue:#"true" forKey:#"facebooknotify"];
NSLog(#"on");
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
[validate alertCommonWithoutMessage:NSLocalizedString(#"val_message",nil) :NSLocalizedString(#"val_facebook_login",nil) :#"OK"];
facebookSwitch.on = YES;
NSLog(#"yes on2 facebookswitch");
}
else {
NSLog(#"val_facebook_conf");
[validate alertCommonWithoutMessage:NSLocalizedString(#"val_message",nil) :NSLocalizedString(#"val_facebook_conf",nil) :#"OK"];
facebookSwitch.on = NO;
[userDefault setValue:#"false" forKey:#"facebooknotify"];
NSLog(#"yes off1 facebookswitch");
I'm using this method,but sumtimes the response is null.

Try this code:
// add this code in your switch touch event
- (IBAction)YourSwitch:(UISwitch*)sender
{
if (UISwitch.on)
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:true forKey:#"Sound"];
[defaults synchronize];
}
else
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:false forKey:#"Sound"];
[defaults synchronize];
}
}
// add this code in your viewDidload .
BOOL isSound= [[NSUserDefaults standardUserDefaults] objectForKey:#"Sound"];
if (isSound){
_ref_slider.on=TRUE;
} else {
_ref_slider.on=FALSE;
}
i hope this code is useful for you.

As to why it's not working, the most common problem is [userDefault synchronize]
Also, rather than using string boolean values, why not use:
[userDefault setBool:YES forKey:#"facebooknotify"];
and then access by
BOOL notified = [userDefault boolForKey:#"facebooknotify"];

Related

Save switch position after closing app

I wanted to know how to save the position of a switch to close and open the application ?
-(IBAction)switch_poids_passagers:(UISwitch *)sender {
NSString *poids_passagers_total;
if(sender.on) {
poids_passagers_total = #"1";
} else {
poids_passagers_total = #"2";
}
[[NSUserDefaults standardUserDefaults] setObject:poids_passagers_total forKey:#"poids_passagers_total"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
NSUserDefaults can save and retrieve BOOLS with a pair methods it provides:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:self.myUISwitch.on forKey:#"switchValue"];
// ...
Later on, maybe in viewWillAppear...
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL switchValue = [defaults boolForKey:#"switchValue"];
self.myUISwitch.on = switchValue;

Switch state not linking to Label

For some reason using NSUserDefaults to save the state of my switch and my label don't seem to be working. I can save the state of my switch and load it however unless i manually change the state of the switch the label will not change to on or off.
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
self->switch1.on = ([[standardDefaults stringForKey:#"switchKey"]
isEqualToString:#"On"]) ? (YES) : (NO);
As you can see i added in label.text = #"OFF" when the switch is off but however it still doesn't change.
- (IBAction)switchChanged:(UISwitch *)sender {
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
if (sender.on == 0) {
label.text = #"OFF";
[standardDefaults setObject:#"Off" forKey:#"switchKey"];
} else if (sender.on == 1) {
label.text = #"ON";
[standardDefaults setObject:#"On" forKey:#"switchKey"];
}
[standardDefaults synchronize];
}
Before i wanted to save the switch state i just used this.
-(IBAction) alarmSettings1{
if (switch1.on)
{ label.text = #"ON";}
else { label.text = #"OFF";}
}
I know I'm just doing something simple wrong but can't figure out what.
You should set your boolean like so:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:#"switchKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
So when you want to set the state of your switch, you would do:
BOOL switchState = [[NSUserDefaults standardUserDefaults] objectForKey:#"switchKey"];
self.switch1.on = switchState;
Also, in your IBAction method, read the state like so:
- (IBAction)switchChanged:(UISwitch *)sender {
label.text = sender.on ? #"ON" : #"OFF";
[[NSUserDefaults standardUserDefaults] setBool:sender.on forKey:#"switchKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

How to write similar codes efficiently in xcode?

Example 1:
- (NSString *)userToken
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
return [userDefaults objectForKey:#"userToken"];
}
- (void)setUserToken:(NSString *)userToken
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:userToken forKey:#"userToken"];
}
- (NSString *)userName
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
return [userDefaults objectForKey:#"userName"];
}
- (void)setUserName:(NSString *)userName
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:userName forKey:#"userName"];
[userDefaults synchronize];
}
These getter and setter are very similar. Is there a smart "macro" that can help me to simplify the codes? So I will be able to write few codes for each property like this:
XXXX(userToken)
XXXX(userName)
Example 2:
+ (MyManager *)sharedManager {
// singleton
...
}
- (void)updateName:(NSString *)name {
self.name = name;
}
+ (void)updateName:(NSString *)name {
return [[self sharedManager] updateName:name];
}
- (void)updateUid:(NSString *)uid {
self.uid = uid;
}
+ (void)updateUid:(NSString *)uid {
return [[self sharedManager] updateUid:uid];
}
I want a way to write them efficiently, too.
What can I do?

Data to Userdefault encoder class for storing custom object

Can anyone give me any link or file, which could be used globally for a project to Store data to NSUserDefault.
Which contains method to save dictionary, array,string,integer all.
#import <Foundation/Foundation.h>
#import "BSUser.h"
#interface CLServerDataManager : NSObject
+(BOOL) saveServerDataToUserDefaults:(id)data;
+(NSDictionary*) getServerDataFromUserDefaults;
//For language Selection
+(void) setLanguage:(NSString*)LanguageName;
+(NSString*) getLanguage;
+(void) setUserPassword:(NSString*)password;
+(NSString*) getUserPassword;
+(void) setUserID:(NSString*)password;
+(NSString*) getUserID;
+(void) setUserUUID:(NSString*)uuid;
+(NSString*) getUserUUID;
+(void) setUserName:(NSString*)name;
+(NSString*) getUserName;
+(void) setimagedata:(float)data;
+(float) getimagedata;
+(void) setUserProfile:(BSUser*)user;
+(BSUser*) getUserProfile;
+ (void) setApplicationPurchaseStatus:(BOOL)purchaseStatus forUser:(NSString*)fbUserID;
+ (BOOL) getApplicationPurchaseStatusforUser:(NSString*)fbUserID;
+ (void) sethintAndTutorial:(BOOL)hintState;
+ (BOOL) gethintAndtutorial;
+ (void) setDeviceToken:(NSString*)deviceToken;
+ (NSString*) getDeviceToken;
//Methods for clear all data from user defaults
+ (void) resetServerDataManager;
#end
and .m file for this
#import "CLServerDataManager.h"
#import "ClConfig.h"
#implementation CLServerDataManager
+(BOOL) saveServerDataToUserDefaults:(id)data {
// if (!data) {
// return NO;
// }
// NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// [defaults setObject:data forKey:USER_ID];
// [defaults synchronize];
// return YES;
return NO;
}
+(NSDictionary*) getServerDataFromUserDefaults {
// NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// NSDictionary* rememberMe = [defaults objectForKey:USER_ID];
// if (rememberMe == nil) {
// return nil;
// }
// return rememberMe;
return nil;
}
//For the store user select language and again fetch
+(void) setLanguage:(NSString*)LanguageName {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:LanguageName forKey:#"Language"];
[defaults synchronize];
}
+(NSString*) getLanguage {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString* Mylanguage = [defaults objectForKey:#"Language"];
if (Mylanguage == nil) {
return nil;
}
return Mylanguage;
}
//for store information cache for user's pics download
+(void) setimagedata:(float)data{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithFloat:data] forKey:#"cache"];
[defaults synchronize];
}
+(float)getimagedata{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
float data = [[defaults objectForKey:#"cache"] floatValue];
if (data == 0) {
return 0;
}
return data;
}
+(void) setUserPassword:(NSString*)password {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:password forKey:#"password"];
[defaults synchronize];
}
+(NSString*) getUserPassword {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString* rememberMe = [defaults objectForKey:#"password"];
if (rememberMe == nil) {
return nil;
}
return rememberMe;
}
+(void) setUserID:(NSString*)password {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:password forKey:#"userID"];
[defaults synchronize];
}
+(NSString*) getUserID {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString* rememberMe = [defaults objectForKey:#"userID"];
if (rememberMe == nil) {
return nil;
}
return rememberMe;
}
+(void) setUserUUID:(NSString*)uuid {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:uuid forKey:#"userUUID"];
[defaults synchronize];
}
+(NSString*) getUserUUID {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString* rememberMe = [defaults objectForKey:#"userUUID"];
if (rememberMe == nil) {
return nil;
}
return rememberMe;
}
+(void) setUserName:(NSString*)name {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:name forKey:#"userName"];
[defaults synchronize];
}
+(NSString*) getUserName {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString* name = [defaults objectForKey:#"userName"];
if (name == nil) {
return nil;
}
return name;
}
//store the current login user profile to user defaults
+(void) setUserProfile:(BSUser*)user {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:user] forKey:#"user_profile"];
[defaults synchronize];
}
+(BSUser*) getUserProfile {
BSUser* returnObject = nil;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [defaults objectForKey:#"user_profile"];
if (dataRepresentingSavedArray != nil)
{
returnObject = (BSUser*)[NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
}
return returnObject;
}
+ (void) setApplicationPurchaseStatus:(BOOL)purchaseStatus forUser:(NSString*)fbUserID {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithBool:purchaseStatus] forKey:fbUserID];
[defaults synchronize];
}
+ (BOOL) getApplicationPurchaseStatusforUser:(NSString*)fbUserID {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber* purchased = [defaults objectForKey:fbUserID];
if (purchased == nil) {
return NO;
}
return [purchased boolValue];
}
#pragma mark Set hint and tutotrial
+ (void) sethintAndTutorial:(BOOL)hintState{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithBool:hintState] forKey:#"hint"];
[defaults synchronize];
}
+ (BOOL) gethintAndtutorial{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber* hintstate = [defaults objectForKey:#"hint"];
if (hintstate == nil) {
return NO;
}
return [hintstate boolValue];
}
+ (void) setDeviceToken:(NSString*)deviceToken {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:deviceToken forKey:#"DeviceToken"];
[defaults synchronize];
}
+ (NSString*) getDeviceToken {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString* name = [defaults objectForKey:#"DeviceToken"];
if (name == nil) {
return nil;
}
return name;
}
+ (void) resetServerDataManager {
[[self class] setLanguage:nil];
[[self class] setUserID:nil];
[[self class] setUserName:nil];
[[self class] setUserPassword:nil];
[[self class] setUserProfile:nil];
[[self class] setUserUUID:nil];
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
NSString *domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:#"facebook"];
if(domainRange.length > 0)
{
[storage deleteCookie:cookie];
}
}
}
Try below link, You will get thing which you need..
NSUserDefaults

how to retain my uitextfield values in viewController when i calling?

I have a main page having 3 textfield in my first view as i navigate to different view and return back to my first view (i.e after i enter all the values i moving to next page).I want my 3 textfield to retain its value when i go back to my main page here my sample code :
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *mobile = MobileNum.text;
[defaults setObject:mobile forKey:self.MobileNum.text];
NSString *amountText = amount.text;
[defaults setObject:amountText forKey:self.amount.text];
[defaults synchronize];
NSString *temp = [defaults objectForKey:self.MobileNum.text];
NSString *temp1 = [defaults objectForKey:self.amount.text];
NSLog(#"%# %#",temp,temp1);
at you viewWillDisappear method store the defaults like.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *mobile = MobileNum.text;
[defaults setObject:mobile forKey:#"mobileNumber"];
NSString *amountText = amount.text;
[defaults setObject:amountText forKey:#"amount"];
[defaults synchronize];
again at your viewWillAppear method retrieve the values like.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([[defaults valueForKey:#"mobileNumber"] length]>0){
MobileNum.text=[defaults valueForKey:#"mobileNumber"];
}
else {
MobileNum.text=#"";
}
if ([[defaults valueForKey:#"amount"] length]>0) {
amount.text=[defaults valueForKey:#"amount"];
}
else {
amount.text=#"";
}
it will work.

Resources