HOW To set user default again to dictionary.
Create the dictionary object and set value to it.
NSMutableDictionary * loginDictionary = [[NSMutableDictionary alloc] init];
[loginDictionary setValue:#"My Address" forKey:#"ADDRESS_KEY"];
[loginDictionary setValue:#"1234567890" forKey:#"PHONE_KEY"];
[[NSUserDefaults standardUserDefaults] setObject:newDictionary forKey:#"INFO_KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
Now I asses those dictionary value and assign to some other object.
NSDictionary *RetrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:#"INFO_KEY"];
txt_Address.text = [RetrievedDictionary objectForKey:#"ADDRESS_KEY"];
txt_Mobile.text = [RetrievedDictionary objectForKey:#"PHONE_KEY"];
How to update?
This is what I try.
[[NSUserDefaults standardUserDefaults] setObject:#"Changed Address" forKey:#"ADDRESS_KEY"];
[[NSUserDefaults standardUserDefaults] setObject:#"0987654321" forKey:#"PHONE_KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
Its not working for me, Need your small suggestion what i am doing wrong.
#Thanks In Advance.
NSMutableDictionary* changedDictionary = [NSMutableDictionary dictionaryWithDictionary:[[NSUserDefaults standardUserDefaults] dictionaryForKey:#"INFO_KEY"]];
[changedDictionary setObject:#"Changed Address" forKey:#"ADDRESS_KEY"];
[changedDictionary setObject:#"0987654321" forKey:#"PHONE_KEY"];
[[NSUserDefaults standardUserDefaults] setObject:changedDictionary forKey:#"INFO_KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
How about this?
NSMutableDictionary *changedDictionary = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:#"INFO_KEY"] mutableCopy];
[changedDictionary setObject:txt_Address.text forKey:#"ADDRESS_KEY"];
[changedDictionary setObject:txt_Mobile.text forKey:#"PHONE_KEY"];
[[NSUserDefaults standardUserDefaults] setObject:changedDictionary forKey:#"INFO_KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSMutableDictionary * loginDictionary = [[NSMutableDictionary alloc] init];
[loginDictionary setValue:#"My Address" forKey:#"ADDRESS_KEY"];
[loginDictionary setValue:#"1234567890" forKey:#"PHONE_KEY"];
[[NSUserDefaults standardUserDefaults] setObject:newDictionary forKey:#"INFO_KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
Your are creating loginDictionary, but adding newDictionary to the NSUserDefaults. Also I would suggest to use constant keys.
Related
I have an NSMutableArray in which I am adding objective and storing in user defaults, but while adding it is crashing.
if ([[NSUserDefaults standardUserDefaults] objectForKey:#"bssidObserverArray"]) {
bssidObserverArray = [[NSUserDefaults standardUserDefaults] objectForKey:#"bssidObserverArray"];
}
if (bssidObserverArray.count > 0) {
if (![bssidObserverArray containsObject:vendorID]) {
NSLog(#"bssidObserverArray %#",bssidObserverArray);
// In this line app is getting crashed
[bssidObserverArray addObject:vendorID];
[[NSUserDefaults standardUserDefaults] setObject:bssidObserverArray forKey:#"bssidObserverArray"];
}
}else{
[bssidObserverArray addObject:vendorID];
[[NSUserDefaults standardUserDefaults] setObject:bssidObserverArray forKey:#"bssidObserverArray"];
}
Any suggestions would be more helpful.
Assuming bssidObserverArray is NSMutable array then come the problem here .
if ([[NSUserDefaults standardUserDefaults] objectForKey:#"bssidObserverArray"]) {
bssidObserverArray = [[NSUserDefaults standardUserDefaults] objectForKey:#"bssidObserverArray"];
}
since NSUserdefaults returns immutable. you can do like this
if ([[NSUserDefaults standardUserDefaults] objectForKey:#"bssidObserverArray"]) {
NSArray *someArray = [[NSUserDefaults standardUserDefaults] objectForKey:#"bssidObserverArray"];
bssidObserverArray = [someArray mutableCopy];
}
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;
I need to update / add a key -> value pair in a NSMutableArray.
I would like to add a key with a fix value if the key isn't set already.
I tried the following - but the app is crashing at addObject with a "mutating method sent to immutable object" error:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:#"bookmarks"];
for (id bookmark in bookmarks) {
if ([bookmark objectForKey:#"type"] == NULL){
[bookmark addObject:#"old" forKey:#"type"];
}
}
[[NSUserDefaults standardUserDefaults] synchronize];
Your outer array contains immutable dictionaries. One option would be the following:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:#"bookmarks"];
[booksmarks enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSDictionary *bookmark, NSUInteger index, BOOL *stop) {
if (!bookmark[#"type"]) {
NSMutableDictionary *mutable = [bookmark mutableCopy];
mutable[#"type"] = #"old";
[bookmarks replaceObjectAtIndex:index withObject:[mutable copy]];
}
}];
// Update NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:bookmarks forKey:#"bookmarks"];
This should be nice an efficient since it can update multiple dictionaries concurrently.
Try this:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//SAVING
NSMutableArray *bookmarksSaving = [NSMutableArray new];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:#[#"red"] forKeys:#[#"color"]]];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:#[#"yellow"] forKeys:#[#"color"]]];
[bookmarksSaving addObject:[[NSMutableDictionary alloc] initWithObjects:#[#"green",#"new"] forKeys:#[#"color",#"type"]]];
[defaults setObject:bookmarksSaving forKey:#"bookmarks"];
[[NSUserDefaults standardUserDefaults] synchronize];
//MODIFY
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:#"bookmarks"];
NSUInteger index = 0;
for (NSDictionary *bookmark in bookmarks) {
NSMutableDictionary *bookmarkMutable = [bookmark mutableCopy];
if ([bookmarkMutable objectForKey:#"type"] == nil)
{
[bookmarkMutable setValue:#"old" forKey:#"type"];
[bookmarks replaceObjectAtIndex:index withObject:bookmarkMutable];
}
index++;
}
[[NSUserDefaults standardUserDefaults] synchronize];
You have to save your bookmarks as NSMutableDictionary to be able to add/remove keys/value
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *bookmarks = [defaults objectForKey:#"bookmarks"];
NSMutableArray *newBookMarks = [bookmarks mutableCopy];
for (NSDictionary *bookmark in bookmarks) {
NSMutableDictionary *newBookmark = [bookmark mutableCopy];
if (![bookmark objectForKey:#"type"]){
[newBookmark setObject:#"old" forKey:#"type"];
}
[newBookMarks addObject:newBookmark];
}
[defaults setObject:newBookMarks forKey:#"bookmarks"];
[defaults synchronize];
I want to hide a outlet that is also a button after the action is made, then I need it to be saved so it doesn't appear again.
Ive used in the cation
- (IBAction)giveheart:(id)sender {
[_heartM setHidden:YES];
nLife = [lblLife.text intValue]+1;
[savedStock setObject:[NSNumber numberWithFloat:nLife] forKey:#"life"];
[savedStock writeToFile: path atomically:YES];
}
Now I need to save it to not appear again even when the app is turned off and on again.
How is that done, and what should I do?
Save the state in the NSUserDefaults when button pressed.
- (IBAction)giveheart:(id)sender {
//Save the state in NSUserDefaults here
[[NSUserDefaults standardUserDefaults]setObject:#"Yes" forKey:#"hide"];
[[NSUserDefaults standardUserDefaults]synchronize];
[_heartM setHidden:YES];
nLife = [lblLife.text intValue]+1;
[savedStock setObject:[NSNumber numberWithFloat:nLife] forKey:#"life"];
[savedStock writeToFile: path atomically:YES];
}
in ViewDidLoad method of the viewcontroller
NSString *status = [[NSUserDefaults standardUserDefaults]objectForKey:#"hide"];
if(status != nil && [status isEqualToString:#"Yes"] )
[_heartM setHidden:YES];
You can save the state of the button to NSUserDefaults as follows.
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSNumber numberWithBool:_heartM.isHidden] forKey:#"buttonState"];
[userDefaults synchronize];
When you view is loaded, you can get the status of button from the defaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSNumber *boolNum = [userDefaults objectForKey:#"buttonState"];
if(boolNum) {
_heartM.hidden = [boolNum boolValue];
}
I'm trying to look for an array of all languages written specifically in English.
I've read several questions about this subject, and I noticed this line of code:
NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:#"AppleLanguages"];
"languages" array-object holds all langauges string, but the problem is that it's written in the language that's defined in my iPhone. I want it to be in English for all devices.
Is there a way to accomplish that?
Force the default language to be "en" then query the languages list and set it back to the previous one. Something like this (not tested thought)
NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:#"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:#"en", nil] forKey:#"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
//your query here
//restore the previous
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:#"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSArray *localIdentifiers = [NSLocale availableLocaleIdentifiers];
NSMutableArray *lanuages = [[NSMutableArray alloc]init];
for (int i = 0; i < [localIdentifiers count]; i++) {
[lanuages addObject:[[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[localIdentifiers objectAtIndex:i]]];
}
NSLog(#"%#", lanuages);
Try this or You can use another method
NSArray* languages = [[NSUserDefaults standardUserDefaults] objectForKey:#"AppleLanguages"];
for (int i = 0; i < [languages count]; i++) {
NSLog(#"%#", [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[languages objectAtIndex:i]]);
}