0

この問題があります。手術があります。しかし、保存したい場合は?すべてを保存したい (テキストフィールド データ ピッカーとラベルの結果)

2 つのテキストフィールドと 1 つのデータピッカー + ラベルの結果があります。

これは私のMです:

#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

このコードは正しいですか?

ありがとうございました....

4

2 に答える 2

1

カップルのもの。

  • で、何らかの理由で-viewDidLoad呼び出します。-synchronizeこれが行うことは、ユーザーのデフォルトでイベントの保存機能を実行することだけです。私が見る限り、何も持っておらず、この呼び出しをスキップして -synchronize することができます。
  • ログの 1 つに「r」の値が表示されています。値は int 値であり、これを正しく表示するには '%i' を使用する必要があります。その値を取得するためにいくつかの計算を実行しているため、それを double などにすることができますが、現在は int にキャストしています。

ユーザーのデフォルト設定に関して、異常に見えるものは何も見当たりません。そのため、正確に何が間違っているのか、正しく行われていないのかを特定して、より良い助けを得ることができるかもしれません.

于 2012-11-26T19:14:36.007 に答える
0

はい、コードは正しく見えます。_data 変数の型は何ですか? NSUser への保存に問題がある場合。self.data.date を保存してみてください

1 つのヒント: NSUserdefautls から値を取得した後に同期する必要はありません。値を NSUserdefaults に設定した後、同期を使用します。

于 2012-11-26T19:13:19.187 に答える