Невозможно сохранить целое число с NSUserDefaults - PullRequest
0 голосов
/ 09 июня 2018

В основном я пытаюсь сделать так, чтобы при перезапуске приложения счет для пользователя сохранялся, в настоящее время счет возвращается к нулю при закрытии и повторном открытии приложения.Я искал многочисленные решения в Интернете, но ничего не нашел.Вот мой код (ViewController.m):

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

int bytes;
int highScore;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    highScore = bytes;

    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];
    [[NSUserDefaults standardUserDefaults] synchronize];


    // Snippet used to get your highscore from the prefs.
    highScore = [[[NSUserDefaults standardUserDefaults] objectForKey:@"HighScore"] intValue ];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)addBytes:(id)sender {
    highScore = [[[NSUserDefaults standardUserDefaults] objectForKey:@"HighScore"] intValue ];
    highScore++;
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];
    [_byteCounter setText:[NSString stringWithFormat:@"%d", highScore]];

}

@end

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

При запуске я не отображал сохраненное значение из NSUserDefaults на метку, вот мой обновленный код, который сохраняет целое число при перезапуске приложения.(Я очень горжусь собой!)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

int bytes;
int highScore;

- (void)viewDidLoad {
    [super viewDidLoad];

    highScore = bytes;

    highScore = [[[NSUserDefaults standardUserDefaults] objectForKey:@"HighScore"] intValue ];
    [_byteCounter setText:[NSString stringWithFormat:@"%d", highScore]];

    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (IBAction)addBytes:(id)sender {
    highScore = [[[NSUserDefaults standardUserDefaults] objectForKey:@"HighScore"] intValue ];
    highScore++;
    [_byteCounter setText:[NSString stringWithFormat:@"%d", highScore]];
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];
}

@end
0 голосов
/ 10 июня 2018

Вы можете использовать этот код, я надеюсь, что он будет работать для вас:

[[NSUserDefaults standardUserDefaults] setInteger: HighScore forKey: @ "HighScore"];

0 голосов
/ 09 июня 2018

Пользовательские настройки по умолчанию не обновляются, поскольку вы не обновляете их.

highscore ++ только увеличивает вашу переменную int, но не увеличивает значение в NSUserDefaults.Поэтому после обновления рекордов вам все равно нужно обновить NSUserDefaults, вызвав:

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];

Более того, вам не нужно и не следует вызывать синхронизацию.Через некоторое время данные будут автоматически записаны на диск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...