У меня есть контроллер представления, содержащий 2 текстовых поля, 2 сегментарных элемента управления и несколько меток, которые отображают метки времени, установленные пользователем, с помощью UIButtons
. Я хотел бы иметь возможность восстановить любые пользовательские значения для этих элементов после выхода/перезагрузки, а также при возврате в основное меню view controller
, которое является navigation controller
. Используя следующий код, я могу восстановить одно из текстовых полей в background/terminate/restart, но я не уверен, как это сделать для другого текстового поля или меток метки времени и сегментированных элементов управления. Я попытался дублировать код восстановления с изменениями для имени текстового поля и строки @"UnsavedText"
без везения.Восстановление нескольких текстовых полей и меток в одном контроллере представления
Кроме того, всякий раз, когда я возвращаюсь в главное меню с помощью кнопки «Назад» на панели навигации, я теряю все свои данные из всех полей.
Вот код в моем делегатом, выбор в государственной реставрации:
// Sets RESTORATION
-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
return YES;
}
-(BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
return YES;
}
Вот соответствующий код на мой взгляд контроллера, чтобы восстановить один текстовое поле. Я в том числе мой viewDidLoad
код с государственной инициализации в случае, если это как-то часть проблемы:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// Updates time on currentTimeLabel
[self updateTime];
// Sets initial button states
[self setInitialState];
// Sets UITextField delegate
self.startLevel.delegate = self;
self.stopLevel.delegate = self;
// initializes basic values for segmented controls
bigTank = YES;
startFractions = @"";
stopFractions = @"";
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// Restoration of text fields
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
// start level text
[coder encodeObject:_startLevel.text forKey:@"UnsavedText"];
[super encodeRestorableStateWithCoder:coder];
}
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
// start level text
_startLevel.text = [coder decodeObjectForKey:@"UnsavedText"];
[super decodeRestorableStateWithCoder:coder];
}
// Sets initial button and label states
- (void)setInitialState
{
self.start.enabled = YES;
self.stop.enabled = NO;
self.calculate.enabled = NO;
self.resume.enabled = NO;
// Text for time labels reset
_startTimeLabel.text = @"- -:- -:- -.- -";
_stopTimeLabel.text = @"- -:- -:- -.- -";
// Resets the minuteRateLabel
_minuteRateLabel.text = @"--.--";
// Resets the text fields to their initial state with the placeholder "inches" text
[_startLevel setText:nil];
[_stopLevel setText:nil];
// Resets inch levels to EVEN
[self.startFractionControl setSelectedSegmentIndex:0];
[self.stopFractionControl setSelectedSegmentIndex:0];
startFractions = @"";
stopFractions = @"";
}
Заранее спасибо!
EDIT:
Это код, который я попробовал на предложение:
Мой щелчок кнопки должен якобы сохранить значение метки времени:
- (IBAction)startButton:(UIButton *)sender
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss.SS"];
_startTimeLabel.text = [formatter stringFromDate:[NSDate date]];
UIButton *startButton = (UIButton *)sender;
// Creates the start time stamp for use in the calculation
startTime = [NSDate timeIntervalSinceReferenceDate];
// sets button states
startButton.enabled = NO;
stop.enabled = YES;
// Hides keypad on startButton click
[self.startLevel resignFirstResponder];
[self.stopLevel resignFirstResponder];
// saves the value for restoration using user defaults
NSDateFormatter *startTimeSave = formatter;
[[NSUserDefaults standardUserDefaults]
setObject:startTimeSave forKey:@"startTimeSaver"];
}
Спасибо. Где именно я бы поставил этот код? –
Вы можете либо поместить его в свой контроллер, либо создать для него отдельный класс. Вы можете обратиться к следующим ссылкам: http://iphonedevsdk.com/forum/iphone-sdk-development/70672-saving-a-value-user-defaults.html, http://www.icodeblog.com/2008/ 10/03/iphone-programming-tutorial-savingretrieving-data-using-nsuserdefaults/ –
Привет, это помогло? –