How to save a string into the NSUserDefaults
?

- 16,698
- 6
- 112
- 113

- 10,994
- 21
- 71
- 100
-
Try this : http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault-usage.html – Jayprakash Dubey Jul 30 '14 at 10:26
-
3If you are looking for Swift, then I have added an answer. – Ε Г И І И О Apr 25 '15 at 15:51
16 Answers
NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];
to get it back later
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"preferenceName"];

- 4,547
- 6
- 35
- 42

- 53,459
- 16
- 107
- 112
-
1Is there any way to save this string base on specific date ? thanks but your code works as same as mine , I create a custom calendar app which user can write their notes in it , for example in 3 Feb user writes something and this text should be saved in 3 Feb , and when user move to the another days he/she could write something else accruing to thad day date – iOS.Lover Feb 02 '12 at 22:00
-
6For some reason the saving part didn't work properly until I called the synchronize method. `NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize` – fs_tigre Feb 24 '14 at 02:07
-
5[[NSUserDefaults standardUserDefaults] synchronize]; is getting deprecated – Juan Boero Mar 29 '16 at 17:53
-
As of iOS 12, calling `synchronize` is no longer needed: https://stackoverflow.com/a/57218546/12484 – Jon Schneider Aug 09 '20 at 22:07
more precisely
-(void)saveToUserDefaults:(NSString*)myString
{
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setObject:myString forKey:@"timestamps"];
[standardUserDefaults synchronize];
}
}

- 13,743
- 3
- 64
- 88
-
11There is no need to perform the nil check for `standardUserDefaults` object. It is perfectly fine to send messages to nil in Objective-C. – jbrennan Jun 19 '10 at 06:29
-
12But more importantly he included "synchronize" - NSUserDefaults is very erratic if you don't call this! – PostCodeism Nov 29 '10 at 19:48
-
1standardUserDefaults synchronize fixed some strange bugs for me, thanks! – Scott Roepnack Dec 04 '12 at 18:00
-
1The reference talks about the `synchronize` method: "use this method only if you cannot wait for the automatic synchronization (for example, if your application is about to exit)" - [NSUserDefaults Class Reference](https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUserDefaults/synchronize) – eliocs Aug 30 '13 at 14:38
-
@jbrennan While your comment is technically correct, this answer is helpful in case you are writing something important and want to be sure it was saved successfully. Furthermore, in that regard, it would be good to test (rather than ignore) the return value of [`synchronize`](https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/nsuserdefaults_class/reference/reference.html#//apple_ref/occ/instm/NSUserDefaults/synchronize). The doc says: YES if the data was saved successfully to disk, otherwise NO. – Basil Bourque Jun 02 '14 at 03:50
Here's how to do the same with Swift;
var valueToSave = "someValue"
NSUserDefaults.standardUserDefaults().setObject(valueToSave, forKey: "preferenceName")
To get it back later;
if let savedValue = NSUserDefaults.standardUserDefaults().stringForKey("preferenceName") {
// Do something with savedValue
}
In Swift 3.0
var valueToSave = "someValue"
UserDefaults.standard.set(valueToSave, forKey: "preferenceName")
if let savedValue = UserDefaults.standard.string(forKey: "preferenceName") {
}

- 19,892
- 8
- 68
- 68

- 11,199
- 1
- 48
- 63
-
-
I'm having trouble with my cynicism detector after lunch. The original question was asked in 2010. I therefore upvoted this since Swift is the way to go today. – Roy Falk Feb 15 '17 at 13:21
Something like this:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];
Then to retrieve:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];
You should really check out Apple's NSUserDefaults Class Reference and also maybe this tutorial: iPhone Programming Tutorial – Saving/Retrieving Data Using NSUserDefaults

- 1,576
- 14
- 19
Do not forget this statement because otherwise it may not always work:
[standardUserDefaults synchronize];

- 997
- 9
- 14
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];
// saving an NSInteger
[prefs setInteger:42 forKey:@"integerKey"];
// saving a Double
[prefs setDouble:3.1415 forKey:@"doubleKey"];
// saving a Float
[prefs setFloat:1.2345678 forKey:@"floatKey"];
// This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
[prefs synchronize];
Retrieving
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];
// getting an NSInteger
NSInteger myInt = [prefs integerForKey:@"integerKey"];
// getting an Float
float myFloat = [prefs floatForKey:@"floatKey"];

- 1
- 1

- 87
- 1
- 6
A good practice is also to use a constant for the key to avoid bugs where you do not store and read with the same key
NSString* const TIME_STAMPS_KEY = @"TIME_STAMPS_KEY";

- 9,542
- 6
- 62
- 102
In Swift5 and Xcode 10.2
//Save
UserDefaults.standard.set(true, forKey: "Key1") //Bool
UserDefaults.standard.set(1, forKey: "Key2") //Integer
UserDefaults.standard.set("This is my string", forKey: "Key3") //String
UserDefaults.standard.synchronize()
//Retrive
UserDefaults.standard.bool(forKey: "Key1")
UserDefaults.standard.integer(forKey: "Key2")
UserDefaults.standard.string(forKey: "Key3")
//Remove
UserDefaults.standard.removeObject(forKey: "Key3")
Note: Save text data(means String, Array, Dictionary etc.) in UserDefaults.
Don't save images in UserDefaults, it's not recommended(Save images in local directory).

- 16,698
- 6
- 112
- 113
-(void)saveToUserDefaults:(NSString*)string_to_store keys:(NSString *)key_for_the_String
{
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setObject:string_to_store forKey:key_for_the_String];
[standardUserDefaults synchronize];
}
}
And call it by:
[self saveToUserDefaults:@"string_to_store" : @"key_for_the_string"];
Retrieve the string by using:
NSString * stored_string = [[NSUserDefaults standardUserDefaults] stringforkey:key_for_the_String]

- 9,564
- 146
- 81
- 122

- 210
- 2
- 8
FirstView
{
NSMutableArray *array; }
- (void)viewDidLoad {
[super viewDidLoad];
array = [[NSMutableArray alloc]init];
array = [[NSUserDefaults standardUserDefaults]objectForKey:@"userlist"];
NSLog(@"%lu",(unsigned long)array.count);
if (array>0)
{
for (int i=0; i<array.count; i++)
{
NSDictionary *dict1 = @{@"Username":[[array valueForKey:@"Username"] objectAtIndex:i],@"Mobilenumber":[[array valueForKey:@"Mobilenumber"] objectAtIndex:i],@"Firstname":[[array valueForKey:@"Firstname"] objectAtIndex:i],@"Lastname":[[array valueForKey:@"Lastname"] objectAtIndex:i],@"dob":[[array valueForKey:@"dob"] objectAtIndex:i],@"image":[[array valueForKey:@"image"] objectAtIndex:i]};
NSLog(@"%@",dict1);
NSArray *array1 = [[NSArray alloc]initWithObjects:dict1, nil];
[[NSUserDefaults standardUserDefaults] setObject:array1 forKey:@"UserList"];
}
}
}
ImagePicker
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.imaGe.image = chosenImage;
[picker dismissViewControllerAnimated:YES completion:NULL];
}
(IBAction)submitBton:(id)sender {
NSMutableArray *array2 = [[NSMutableArray alloc]initWithArray: [[NSUserDefaults standardUserDefaults]objectForKey: @"userlist"]]; UIImage *ima = _imaGe.image; NSData *imagedata = UIImageJPEGRepresentation(ima,100); NSDictionary *dict = @{@"Username":_userTxt.text,@"Lastname":_lastTxt.text,@"Firstname":_firstTxt.text,@"Mobilenumber":_mobTxt.text,@"dob":_dobTxt.text,@"image":imagedata}; [array2 addObject:dict]; [[NSUserDefaults standardUserDefaults]setObject:array2 forKey:@"userlist"]; NSLog(@"%@",array2); [self performSegueWithIdentifier:@"second" sender:self]; }
(IBAction)chooseImg:(id)sender {
UIImagePickerController *picker = [[UIImagePickerController
alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:picker animated:YES completion:NULL];}
second View { NSMutableArray *arr; }
- (void)viewDidLoad {
[super viewDidLoad];
arr =[[NSMutableArray alloc]init];
arr = [[NSUserDefaults standardUserDefaults]objectForKey:@"userlist"]; }
#pragma mark- TableView DataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1; }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return arr.count; }
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellId = @"tablecell";
TableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:cellId];
cell.userLbl.text =[[arr valueForKey:@"username"] objectAtIndex:indexPath.row];
cell.ageLbl.text =[[arr valueForKey:@"dob"] objectAtIndex:indexPath.row];
cell.profileImg.image =[UIImage imageNamed:[[arr valueForKey:@"image"] objectAtIndex:indexPath.row]];
return cell; }

- 19
- 2
For saving use this :
[[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"KTerminated"];
[[NSUserDefaults standardUserDefaults]synchronize];
For Retriveing use this :
[[[NSUserDefaults standardUserDefaults]stringForKey:@"KTerminated"] isEqualToString:@"YES"];

- 3,535
- 3
- 26
- 38

- 62
- 6
Here For Swift, I have created two functions which will be save and retrive value from the Preferences.
This will be help full for you.
// For saving object
static func setObject(value:AnyObject ,key:String)
{
let pref = NSUserDefaults.standardUserDefaults()
pref.setObject(value, forKey: key)
pref.synchronize()
}
static func getObject(key:String) -> AnyObject
{
let pref = NSUserDefaults.standardUserDefaults()
return pref.objectForKey(key)!
}

- 889
- 7
- 20
update for Swift 3
func setObject(value:AnyObject ,key:String)
{
let pref = UserDefaults.standard
pref.set(value, forKey: key)
pref.synchronize()
}
func getObject(key:String) -> AnyObject
{
let pref = UserDefaults.standard
return pref.object(forKey: key)! as AnyObject
}

- 159
- 1
- 14
In Swift 4.0.3 Xcode 9
============set Data in UserDefaults =========
UserDefaults.standard.set(userName, forKey: "userName")
UserDefaults.standard.synchronize()
============Get Data in UserDefaults =========
let userName = UserDefaults.standard.string(forKey: "userName")
print(userName ?? "Gera")
userNameTextField.text = ""+userName!

- 10,807
- 1
- 75
- 53
Here Swift updated:
let userID = "BOB"
Declare userDefaults:
let defaults = UserDefaults.standard
defaults.setValue(userID, forKey: "userID")
And get it:
let userID = defaults.object(forKey: "userID")

- 21
- 2