2011-08-02 7 views
0

私のアプリにはログインがあり、ログインに成功するとユーザーはセッションIDを取得します。ユーザーのセッションが終了し、期限切れのセッションがあるページを要求すると、バックエンドはセッションが終了したことを報告し、ユーザーはログインし直してからpopToRootViewControllerAnimated(ログインページ)を呼び出します。 NSURLConnectionクラスを使用して、ダウンロードが完了したときのコールバックをUIViewControllerにスケジュールしています。私が遭遇している問題は、私がviewDidLoadの間にNSURLConnectionをスケジュールし、ビューコントローラが現れる前に接続レポートが戻ってくることです。私はNSURLConnectionviewDidAppearに入れますが、ビューが出現するたびにサーバーに連絡したくありません。誰もがこの問題を解決する最良の方法を知っていますか?ViewDidAppearの前にiPhoneをポップするView Controller

答えて

2

まず、列挙型の変数を宣言:

typedef enum { 
    StatusLoggedOut, 
    StatusAttemptingLogin, 
    StatusLoggedIn 
} LoginStatus; 

次にログイン状態を保存するために、あなたのビューコントローラにメンバ変数を追加します。その後、viewDidAppear内側:

- (void)viewDidAppear:(BOOL)animated 
{ 
    if (loginStatus == StatusLoggedOut) { 
     loginStatus = StatusAttemptingLogin; 
     // start the NSURLConnection 
    } 
} 

ログインが完了すると、あなたは(それが判明する方法に応じて)StatusLoggedInまたはStatusLoggedOutに状態を切り替えることができます:あなたはこれを行うことができます。

あなたは単純なBOOLを手に入れることができましたが、すべての中間の状態を表す方が良いとの経験が教えてくれました。

また、あなたはこれについて質問しませんでしたが、ログイン画面をモーダルビューとして提示した方がユーザーの利便性が向上すると思います。 popToRootViewControllerを使用すると、ユーザーは自分のアプリで自分の場所を失い、迷惑になります。 (保存して復元しない限り、自分で多くの作業をしています)

+1

+1ログインするモーダルビューコントローラについての非常に良い提案。 – InsertWittyName

関連する問題