NSUserDefaults проблема - PullRequest
       1

NSUserDefaults проблема

0 голосов
/ 21 сентября 2010

У меня есть это в моем делегате приложения applicationDidFinishLaunching метод:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"AcceptTC"] == nil){
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AcceptTC"];
    [defaults registerDefaults:appDefaults];
}

, и у меня есть это в моем методе RootViewController viewDidLoad:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(![defaults boolForKey:@"AcceptTC"]){
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notice" message:@"By using this application you agree to be bound by the Terms and Conditions as stated within this application." delegate:self cancelButtonTitle:@"No Deal" otherButtonTitles:@"I Understand",nil];
    [alert show];
    [alert release];
}

и мой делегат представления предупрежденияделает это:

if(buttonIndex == 0){
            exit(0);
        }
        else{
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:@"YES" forKey:@"AcceptTC"];
        }

Однако, когда я нажимаю «Я понимаю» (кнопка индекс 1), а затем перезагружаю приложение, я все равно вижу предупреждение!Даже если я определенно установил значение YES.

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

Спасибо

Ответы [ 3 ]

7 голосов
/ 21 сентября 2010

В моем приложении я использую NSUserDefaults с bool, работает нормально.

Когда загружается первый ViewController, он будет делать:

BOOL terms = [[NSUserDefaults standardUserDefaults] boolForKey:@"termsaccepted"];

if (!terms) {
   [self presentModalViewController:disclaimerViewController animated:YES];
}

В представлении отказа, посленажата кнопка:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"termsaccepted"];
[[NSUserDefaults standardUserDefaults] synchronize];

Я думаю, что вам не хватает части "синхронизация".Однако я считаю, что использование bool более упрощено.

4 голосов
/ 21 сентября 2010

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

2 голосов
/ 21 сентября 2010

Concering registerDefaults:

Содержимое домена регистрации не записано на диск ;Вы должны вызывать этот метод каждый раз, когда ваше приложение запускается.Вы можете поместить plist-файл в каталог ресурсов приложения и вызвать registerDefaults: с содержимым, которое вы прочитали из этого файла.

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary \
    dictionaryWithContentsOfFile:[[NSBundle mainBundle] \ 
    pathForResource:@"Defaults" ofType:@"plist"]]];

Код взят из этого ответа SO .

Еще одна статья в блоге о NSDefaults:

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