0

現在、ユーザー名が NSUserDefaults に存在するかどうかを確認したいのですが、存在しない場合は、モーダル ビュー コントローラーをロードしたいと考えています。問題は、ユーザー名が nil であっても、存在するかのように動作することです。ここに私が持っているものがあります:

//Check if the login data exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"username"] != nil) {

        //Load Login View if no username is found
        NSLog(@"No username found");
        LoginViewController *loginView = [[LoginViewController alloc] init];
        [self presentViewController:loginView animated:YES completion:nil];
    }

    else {

        NSString *savedUsername = [defaults stringForKey:@"username"];
        NSLog(@"Username found: %@", savedUsername);

    }

私はNSLogでこれを取得し続けます:Username found: (null)

どんな助けでも大歓迎です!

4

8 に答える 8

10
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"username"] == nil) {

        //Load Login View if no username is found
        NSLog(@"No username found");
        LoginViewController *loginView = [[LoginViewController alloc] init];
        [self presentViewController:loginView animated:YES completion:nil];
    }

    else {

        NSString *savedUsername = [defaults stringForKey:@"username"];
        NSLog(@"Username found: %@", savedUsername);

    }
于 2013-05-06T08:48:28.453 に答える
3
if ( ! [defaults objectForKey:@"username"] )
于 2013-05-06T08:47:04.857 に答える
2

を使用する必要はなく、単にこれを試すことができますnil

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (![defaults objectForKey:@"Username"]) {

} else {

}
于 2013-05-06T09:03:18.760 に答える
2

あなたが使用し!= nilているのは、あなたが望むものの反対です。最初の if ステートメントを次のように変更します。

if ([defaults objectForKey:@"username"] == nil) {

あるいは単に:

if (![defaults objectForKey:@"username"]) {
于 2013-05-06T08:51:26.777 に答える
1

他の人がすでに指摘しているように、あなたのテスト

if ([defaults objectForKey:@"username"] != nil)

間違っている。しかし、

if ([defaults objectForKey:@"username"] == nil)

ユーザーのデフォルトに文字列ではない「username」の値が含まれている場合、問題が発生します。その場合objectforKeyは値を返しますが、 をstringForKey返しますnil

したがって、次のもののみ stringForKeyを使用する必要があります。

NSString *savedUsername = [defaults stringForKey:@"username"];
if (savedUsername == nil) {
    //Load Login View if no username is found
    NSLog(@"No username found");
    // ...
} else {
    NSLog(@"Username found: %@", savedUsername);
}
于 2013-05-06T09:08:48.673 に答える