NSUserDefaults standardUserDefaults

У меня такая проблема. У меня операция. Но если я хочу сэкономить? Я хочу сохранить все (сборщик данных текстового поля и метка)

У меня есть 2 текстовых поля и 1 датапикер + результат в метке.

это моя М:

#import "ViewController.h"
#import "ResultViewController.h"



@interface ViewController ()

@end

@implementation ViewController

@synthesize myLabel;

-(IBAction)calculate:(id)sender{



    NSDate *past = _data.date ;
    NSDate *now = [NSDate date];

    NSCalendar *gregorianCalendar = [[NSCalendar alloc]
                                     initWithCalendarIdentifier:NSGregorianCalendar];
    NSUInteger unitFlags = NSDayCalendarUnit;
    NSDateComponents *components = [gregorianCalendar components:unitFlags
                                                        fromDate:past
                                                          toDate:now
                                                        options:0];
    int z = [components day];
    int a = ([_textField1.text intValue]);
    int b = a*([_textField2.text intValue]);

    int r = b * z / 20;

    myLabel.text = [[NSString alloc] initWithFormat:@"%d", r];



}

- (void)viewDidLoad
{
    [super viewDidLoad];



    NSDate *past = _data.date ;
    NSDate *now = [NSDate date];

    NSCalendar *gregorianCalendar = [[NSCalendar alloc]
                                     initWithCalendarIdentifier:NSGregorianCalendar];
    NSUInteger unitFlags = NSDayCalendarUnit;
    NSDateComponents *components = [gregorianCalendar components:unitFlags
                                                        fromDate:past
                                                          toDate:now
                                                         options:0];
    int z = [components day];
    int a = ([_textField1.text intValue]);
    int b = a*([_textField2.text intValue]);

    int r = b * z / 20;

    myLabel.text = [[NSString alloc] initWithFormat:@"%d", r];

    self.textField1.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"key1"];
    self.textField2.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"key2"];
    self.myLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"key3"];
    self.data = [[NSUserDefaults standardUserDefaults] objectForKey:@"key4"];


[[NSUserDefaults standardUserDefaults]synchronize];


    // Do any additional setup after loading the view, typically from a nib.
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {


    if ([segue.identifier isEqualToString:@"detail"]) {

        ResultViewController* destVC = (ResultViewController*)segue.destinationViewController;

        destVC.myString = self.myLabel.text;

    }
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:YES];



    [[NSUserDefaults standardUserDefaults] setObject:self.textField1.text forKey:@"key1"];
    [[NSUserDefaults standardUserDefaults] setObject:self.textField2.text forKey:@"key2"];
    [[NSUserDefaults standardUserDefaults] setObject:self.myLabel.text forKey:@"key3"];
    [[NSUserDefaults standardUserDefaults] setObject:self.data forKey:@"key4"];

    [[NSUserDefaults standardUserDefaults]synchronize];

}
@end

Этот код правильный?

Спасибо....


person Federico Ciabatta    schedule 26.11.2012    source источник
comment
На первый взгляд код выглядит правильно. В чем конкретно ваша проблема?   -  person Ryan Poolos    schedule 26.11.2012
comment
Но теперь мои сохранения не работают! У меня есть 3 просмотрщика. У меня есть эта операция в 3-м контроллере просмотра. Но если я пойду на первое, мое свидание потеряно. И если я иду только во втором контроллере представления, моя дата сохраняется.   -  person Federico Ciabatta    schedule 27.11.2012


Ответы (2)


Пара вещей.

  • В вашем -viewDidLoad вы почему-то звоните -synchronize. Все, что это делает, это выполняет функцию сохранения для любых событий по вашим пользовательским настройкам по умолчанию. Насколько я понимаю, у вас их нет, и вы можете пропустить этот вызов -synchronize.
  • Один из ваших журналов показывает значение "r". Это значение типа int, и вы должны использовать "% i" для правильного отображения. Вы выполняете некоторые вычисления, чтобы получить это значение, поэтому вы можете захотеть, чтобы это было двойное или что-то еще, но в настоящее время вы преобразуете его в int.

Я не вижу ничего нестандартного в пользовательских настройках по умолчанию. Так что, возможно, вы можете указать, что именно не так или что делается неправильно, чтобы получить более качественную помощь.

person Bill Burgess    schedule 26.11.2012

Да, код выглядит правильно. Какой у вас тип переменной _data? Если у вас возникли проблемы с сохранением в NSUser. Попробуйте сохранить self.data.date

Один совет: вам не нужно синхронизировать после получения значений от NSUserdefautls. Используйте синхронизацию после установки значений NSUserdefaults.

person Arda Dogantemur    schedule 26.11.2012
comment
Но теперь мои сохранения не работают! У меня есть 3 просмотрщика. У меня есть эта операция в 3-м контроллере просмотра. Но если я пойду на первое, мое свидание потеряно. И если я иду только во втором контроллере представления, моя дата сохраняется. - person Federico Ciabatta; 26.11.2012
comment
и моя дата в средстве выбора даты не сохраняется ... я не понимаю, в чем проблема. - person Federico Ciabatta; 26.11.2012