2011-01-29 5 views
0

私のiPhoneアプリでは、私はeahプロジェクトの一意の識別子を持っています。ユーザーがログインすると、すべてのページで一意の識別子にアクセスできるようにする必要があります。タブバーの異なるタブを切り替えるときにNSUserDefaultsを管理するにはどうすればいいですか?

私はそれを行うためにNSUserDefaultsを使用しています。しかし、問題は、ログインが最初のページではないということです。ユニークなIDを必要とするページにアクセスすると、「unknownkey」が表示されます。

この問題を回避するにはどうすればよいですか?

また、ユーザーがログインせずに一部の部分にアクセスできるように、ログイン画面を最初の画面として追加することはできません。

答えて

1

は、アプリケーションの起動時にモーダルログインのViewControllerを提示する(例えば、あなたのアプリがDropboxのクライアントである)

if (![[NSUserDefaults standardUserDefaults] objectForKey: @"uniqueid"]) { 
    //...user is not logged in.. 
} else { 
    //...user is logged in... 
} 
+0

しかし、ユーザーがログインしていない場合、およびユーザーが "uniqueid"の定義がないページにいる場合は、初めてです。次に、エラー:valuefor を返し、クラッシュします。 –

+0

keyが設定されていない場合、objectForKeyはnilを返します。http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html –

+0

ユーザがログインする前に別の一意の識別子をNSUserDefaultsに保存すること、この特別な識別子が登場するたびにそのユーザを許可されていないものとして扱うこと –

0

これはプログラミングの問題ではなく設計上の問題だと思いますか?

ログイン画面を起動画面に移動するか、ユーザーがログインするまでタブバーをそのままにしておくこともできますし、全体を別の方法で再設計することもできます。ログインはすべてのために必要であれば

+0

私は自分の質問を編集しました。 'Edit'部分を確認してください。 –

+0

私の答えは本当に変わりません。あなたのデザインを再加工する必要があります。 – pt2ph8

0

のようなものを試してみてください。
ログインに成功するまで、それを却下しないでください。

0

RootViewControllerのviewDidLoadメソッドでは、保存されたNSUserDefaultをIF文でチェックする必要があります。簡単です。

-(void)viewDidLoad { 

    if(![[NSUserDefaults standardDefaults] objectForKey:@"uniqueid"]) { 
    // here you'll want to present a view modally inside a new navigation controller. 

    LoginViewController *lvc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 

    UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:lvc]; 

    [self.navigationController presentModalViewController:controller animated:YES]; 

} else { 

    // this is where you'd set up the client if the user is already logged in. 

    } 
} 
関連する問題