Reputation: 233
I am trying to save dynamically generated string values in iphone using NSUserDefaults, but i don't know how generate keys dynamically for those string values which i want to save each time they appear, Only i know how to save a single string using a default key, if i use same key again it will overwrite previous string value. How to generate different keys dynamically in NSUserDefaults?
I know only this much about how to save using single key
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"mystring" forKey:@"stringkey"]; // To store String values
NSString *getString = [standardUserDefaults stringForKey:@"stringkey"];
Upvotes: 0
Views: 827
Reputation: 53112
If your data is overwriting, that's not a problem that should be solved by auto generating keys, particularly if you're not keeping track of these keys. If you want to store multiple objects to the same place, you should possibly be using an array:
Try adding these methods:
- (void) addStringToMyDefaults:(NSString *)stringToAdd {
// Step 1: Get our defaults
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
// Step 2: Declare our Strings array
NSMutableArray * myStringsArray;
// Step 3: See if an array already exists
if ([defaults objectForKey:@"myStringArray"]) {
// Step 4a: An array already exists. We will initialize our array with the saved array so we have all the latest strings.
myStringsArray = [[NSMutableArray alloc] initWithArray:[defaults objectForKey:@"myStringArray"]];
// Step 5: Add new string to our saved array
[myStringsArray addObject:stringToAdd];
}
else {
// No array exists, let's create a new one with our new string as the first object
myStringsArray = [[NSMutableArray alloc]initWithObjects:stringToAdd, nil];
}
// Save our updated array back to defaults
[defaults setObject:myStringsArray forKey:@"myStringArray"];
}
- (NSArray *) getCurrentlySavedStrings {
return [[NSUserDefaults standardUserDefaults]objectForKey:@"myStringArray"];
}
Then you run it like this:
[self addStringToMyDefaults:@"Hello"];
[self addStringToMyDefaults:@"World!"];
NSLog(@"MySavedStrings: %@", [self getCurrentlySavedStrings]);
Note: Although userDefaults will synchronize periodically on its own, if the data is important calling synchronize
on userDefaults will trigger this manually.
Upvotes: 1
Reputation: 2185
you should generate a collection NSArray/NSDictionary
dynamically. Then that collection may be stored to NSUserDefaults
.
Upvotes: 0