Anand K
Anand K

Reputation: 233

How to generate multiple keys dynamically in NSUserDefaults in iphone

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

Answers (2)

Logan
Logan

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

Macrosoft-Dev
Macrosoft-Dev

Reputation: 2185

you should generate a collection NSArray/NSDictionary dynamically. Then that collection may be stored to NSUserDefaults.

Upvotes: 0

Related Questions