0

私はコーディングが初めてで、練習して簡単な集計/カウンターアプリを作成しています。ユーザーがアプリを閉じたときに中断したところから続行できるように、番号を保存してロードしようとしています。

保存ボタンと読み込みボタンは実際には非常にうまく機能します...ただし、保存された数値を読み込み、+1 または -1 ボタンを押すと、保存されたデータのないアプリの新しい読み込みであるかのように 0 から始まります。

ユーザーが保存された数値をロードしたときに、+1 ボタンと -1 ボタンがそのロードされた数値を読み取れるようにするにはどうすればよいですか?

これは私の +1 ボタンです.変更していません:

-(IBAction)Up:(id)sender; {


    Number = Number + 1;
    Count.text = [NSString stringWithFormat:@"%i", Number];

}

これらは私の保存ボタンと読み込みボタンです:

-(IBAction)save {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@(self.number) forKey:@"number"];
    [defaults synchronize];
}
-(IBAction)load {


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@(self.number) forKey:@"number"];
    self.number = [[defaults objectForKey:@"number"] integerValue];

}

下部の余分な部分は次のとおりです。

    - (void)setNumber:(NSInteger)number {
        _number = number;
        self.label.text = [NSString stringWithFormat:@"%i", _number];
        // this part is giving a warning says "writable atomic property 'number' cannot
        // pair a synthesized getter with a user defined setter
    }

そして最後に、これが私の .h です

int Number;


@interface ViewController : UIViewController


{
    IBOutlet UISwitch *theswitch;
    IBOutlet UILabel *count;


}

-(IBAction)Up:(id)sender;
-(IBAction)Down:(id)sender;
-(IBAction)Reset:(id)sender;

-(IBAction) save;
-(IBAction) load;

@property NSInteger number;

@property (assign) UILabel *label;


@end

これは簡単な修正だと思います..助けて?!

4

1 に答える 1

2

まず、変数名を小文字で始めます。

ですか?Count_ UILabelテキストを設定していますが、実際のを更新することはありませんNumber。したがってNSString、 を保存するNSNumber代わりに、 を保存します。

[defaults setObject:@(self.number) forKey:@"number"]

プロパティを作成Numberします。

@property NSInteger number;

次に、数値プロパティのカスタム セッターを記述できます。

- (void)setNumber:(NSInteger)number {
    _number = number;
    self.label.text = [NSString stringWithFormat:@"%l", _number];
    // your label should also be a propery
}

ロードするときは、次のように番号を設定します。

self.number = [[defaults objectForKey:@"number"] integerValue]

あなたの更新された質問について:

表示される警告は、プロパティがatomicあり、実装しているカスタム セッターが非アトミックであるためです。プロパティ宣言は実際にはそうあるべきです@property (nonatomic) NSInteger number;(これが意味することは、この質問の範囲外です)。

実際にそのプロパティを使用することはありません。int Number;のすべての出現箇所を取り除き、 にNumber置き換えますself.number。そうすれば、プロパティにカスタム セッターを使用できます。

ボタンのメソッドは次のようになります。

-(IBAction)up:(id)sender; {
    self.number = self.number+1;
}

ラベルの更新は、 のセッターで処理されnumberます。

[defaults setObject:@(self.number) forKey:@"number"];からも削除load:

-(IBAction)load {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.number = [[defaults objectForKey:@"number"] integerValue];
}
于 2013-08-13T02:08:46.083 に答える