0

タブベースのアプリケーションを使用しており、タブを切り替えるたびにデータをリロードしたいと考えています。そのため、呼び出されるものを使用viewWillAppear:しましたが、データはリロードされません。これは、多くの を使用した結果[NSUserDefault]でしょうか? これが私のコードです:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self reloadData];
}

-(void)reloadData {

    //Loading all the data
    totalApples = [[NSUserDefaults standardUserDefaults]integerForKey:@"totalApples"];
    [self setText:[NSString stringWithFormat:@"%.01f", totalApples] withExistingAttributesInLabel:self.applesLabel];

    applesPerSecond = [[NSUserDefaults standardUserDefaults]integerForKey:@"applesPerSecond"];
    [self setText:[NSString stringWithFormat:@"%.01f", applesPerSecond] withExistingAttributesInLabel:self.applesPerSecondLabel];

    applesPerClick = [[NSUserDefaults standardUserDefaults]integerForKey:@"applesPerClick"];
}
4

2 に答える 2

2

使用する場合は、データを書き込んでNSUserDefaultsから呼び出すとよいでしょう。-synchronize

次の例を見てください。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:@100 forKey:@"SomeKey"];

[defaults synchronize]; //This will ensure data is written.

このメソッドを呼び出さない場合、システムは定期的に呼び出します。ただし、おそらく発生しているようなタイミングの問題が発生する可能性があります。

NSUserDefaultsこの動作の詳細については、こちらをご覧ください。

アップデート

この質問は今、その文脈を失っていると思います。これは、コメントの下に投稿した更新されたメソッドです。これはおそらく問題ではないため、フォローアップの質問を投稿する価値があるかもしれませんNSUserDefaults

ここでは、少なくとも後世のために、NSUserDefaultsデータを書き出すために使用する例を示します。また、乗算が実行されているため、priceFarmHandsを float として保存するようにメソッドを更新しました。(以前は整数として書き出されており、おそらく切り捨てられていました)。

- (void)buyFarmhand {
    farmHands++;
    totalApples -= priceFarmHands;

    if(priceFarmHands < 1000) {
        priceFarmHands = priceFarmHands * 1.35;
    } else if(priceFarmHands < 10000) {
        priceFarmHands = priceFarmHands * 1.25;
    } else {
        priceFarmHands = priceFarmHands * 1.15;
    }

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setFloat:priceFarmHands forKey:@"priceFarmHands"];
    [defaults setInteger:farmHands forKey:@"farmHands"];
    [defaults setDouble:totalApples forKey:@"totalApples"];

    [defaults synchronize];

    [self setText:[NSString stringWithFormat:@"%.f", priceFarmHands] withExistingAttributesInLabel:self priceFarmHandsLabel];
    [self setText:[NSString stringWithFormat:@"%d", farmHands] withExistingAttributesInLabel:self.numberFarmhands];
}
于 2013-09-08T17:02:52.323 に答える