1

У меня есть контроллер представления, содержащий 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"]; 
    } 

ответ

0

Вы можете сохранить текстовые значения с помощью пользователя по умолчанию. Ниже приведен пример фрагмент код:

NSString *valueToBeSaved = @"someValue"; 
[[NSUserDefaults standardUserDefaults] 
setObject:valueToBeSaved forKey:@"preferenceName"]; 

И для получения вашего значения позже, используйте:

NSString *savedValue = [[NSUserDefaults standardUserDefaults] 
stringForKey:@"preferenceName"]; 
+0

Спасибо. Где именно я бы поставил этот код? –

+0

Вы можете либо поместить его в свой контроллер, либо создать для него отдельный класс. Вы можете обратиться к следующим ссылкам: 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/ –

+0

Привет, это помогло? –