06-09-2009, 06:42 PM
#1 (permalink )
Registered Member
Join Date: May 2009
Posts: 26
Save State of Picker
I am trying to save a picker row so that it displays the same selection the next time a user loads the app.
I'm not getting any warnings or errors, but the changes aren't saving. Any suggestions?
Code:
NSUserDefaults *wheelPrefs = [NSUserDefaults standardUserDefaults];
wheelPicker = [wheelPrefs objectForKey:@"wheelData"];
[wheelPrefs synchronize];
Code:
-(void)applicationDidTerminate {
NSUserDefaults *wheelPrefs = [NSUserDefaults standardUserDefaults];
[wheelPrefs setObject:[NSNumber numberWithInt:[wheelPicker selectedRowInComponent:0]] forKey:@"wheelData"];
}
Cheers
06-09-2009, 06:52 PM
#2 (permalink )
Registered Member
Join Date: Dec 2008
Location: UK
Posts: 1,886
This is what I do
Code:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:row forKey:@"pickerRow"];
}
And then to load it up.
Code:
- (void)viewDidLoad {
[super viewDidLoad];
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
[pckrView selectRow:[prefs integerForKey:@"pickerRow"] inComponent:0 animated:YES];
}
Just make sure all your IB connections are right.
Tom.
06-09-2009, 06:59 PM
#3 (permalink )
Former NeXTStep Developer
Join Date: Mar 2009
Posts: 997
Code:
wheelPicker = [wheelPrefs objectForKey:@"wheelData"];
Gets an object from the preferences. You should have used:
Code:
[wheelPrefs setObject: wheelPicker forKey:@"wheelData"];
But that's probably not going to work either, since you don't want to actually try to save the picker. You want to save the value of the picker, more like:
Code:
[wheelPrefs setInteger: [wheelPicker row] forKey:@"pickerRow"];
joe
06-10-2009, 12:04 PM
#4 (permalink )
Registered Member
Join Date: May 2009
Posts: 26
Multiple Pickers
Thank you both! This worked beautifully!
BUT, there's always something....
I have multiple pickers (they are stacked so they show and hide) and only the most recent picker change is saving. Any ideas?
Code:
NSUserDefaults * wheelPrefs = [NSUserDefaults standardUserDefaults];
[wheelPicker selectRow:[wheelPrefs integerForKey:@"wheelPickerRow"] inComponent:0 animated:YES];
NSUserDefaults * carPrefs = [NSUserDefaults standardUserDefaults];
[carPicker selectRow:[carPrefs integerForKey:@"carPickerRow"] inComponent:0 animated:YES];
Code:
NSUserDefaults * wheelPrefs = [NSUserDefaults standardUserDefaults];
NSUserDefaults * carPrefs = [NSUserDefaults standardUserDefaults];
Code:
[wheelPrefs setInteger:row forKey:@"wheelPickerRow"];
[carPrefs setInteger:row forKey:@"carPickerRow"];
06-10-2009, 12:26 PM
#5 (permalink )
Former NeXTStep Developer
Join Date: Mar 2009
Posts: 997
There's nothing obviously wrong with your code, other than this is redundant:
Code:
NSUserDefaults * wheelPrefs = [NSUserDefaults standardUserDefaults];
NSUserDefaults * carPrefs = [NSUserDefaults standardUserDefaults];
You only need one prefs pointer object, not one for each preference you're retrieving/saving.
From what little you're showing, it looks like you should be saving and restoring the current value for each of those two pickers. Is something else happening?
joe
06-10-2009, 12:45 PM
#6 (permalink )
Registered Member
Join Date: May 2009
Posts: 26
Thanks, I have gotten rid of the redundant line. I feel like this line
Code:
[prefs setInteger:row forKey:@"wheelPickerRow"];
needs something like this
Code:
[prefs setInteger:wheelPicker row forKey:@"wheelPickerRow"];
06-10-2009, 12:53 PM
#7 (permalink )
Registered Member
Join Date: May 2009
Posts: 26
Quote:
Originally Posted by
SimonCowell
Thanks, I have gotten rid of the redundant line. I feel like this line
Code:
[prefs setInteger:row forKey:@"wheelPickerRow"];
needs something like this
Code:
[prefs setInteger:wheelPicker.row forKey:@"wheelPickerRow"];
The problem is that the last picker choice is setting the row number for all of the other pickers
06-10-2009, 08:32 PM
#8 (permalink )
Registered Member
Join Date: May 2009
Posts: 26
Solution
[prefs setObject:[NSNumber numberWithInt:[wheelPicker selectedRowInComponent:0]] forKey:@"wheelPickerRow"];
06-10-2009, 08:32 PM
#9 (permalink )
Former NeXTStep Developer
Join Date: Mar 2009
Posts: 997
Quote:
Originally Posted by
SimonCowell
The problem is that the last picker choice is setting the row number for all of the other pickers
Are you saving the row number for each picker as the user selects it? Or trying to save them all at the same time? Your code shows the same variable (row) used for each default, so I that would be the expected result.
joe
Thread Tools
Display Modes
Linear Mode
Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
» Advertisements
» Online Users: 912
30 members and 882 guests
2005lhq , anshuk1219 , armmzz , Azuresilver , beaing40 , Brix , cacao , dljeffery , er.nishant11 , fiftysixty , glennrichard113 , headkaze , johnny40409 , Krzyloren , LEARN2MAKE , Lorrainebqo , magnett , MarkC , marovada , marshusensei , MattPo , merITH44 , mizzytheboy , onzevil12 , qkstrk , rcheguraju , Snail , TTStu , Turkeysaladboy , vidyasagar
Most users ever online was 1,187, 10-11-2011 at 08:09 AM.
» Stats
Members: 158,304
Threads: 89,032
Posts: 379,813
Top Poster: BrianSlick (7,086)
Welcome to our newest member, Azuresilver