0

ログイン画面をモーダルに表示する必要があり、アプリにタブバーがあるアプリケーションを作成しています。

タブバーを UIWindow に直接追加しました。新しいビュー (ログイン ビュー) に切り替えるには、applicationDidFinishLaunching をオーバーライドして、ユーザーがログイン資格情報を持っているかどうかを確認し、それ以外の場合はログイン画面を表示しません (初回使用またはログアウトの場合を想定して) ログイン画面をモーダルに表示します。アプリ内の設定タブでログアウトのオプションを提供しました。

[[UIApplication sharedApplication] delegate] 呼び出しを使用して、ユーザーが初めてログインしたときにアプリ デリゲートのインスタンスを取得しています。このようにして、Application Delegate の一部である tabBarController にアクセスできます (ほとんどの場合)。ただし、設定のログアウト オプションから loginViewController を呼び出そうとすると (将来のライフ サイクルのどこかで)、同じ [[UIApplication sharedApplication] delegate] を呼び出すと、メソッドを使用できないデリゲートが返されます。定義しました。実行時に「認識されないセレクターがインスタンスに送信されました」というエラーが表示されます。

[[UIApplication sharedApplication] delegate] の呼び出しが正確に何を返すかを理解する必要がありますか? 返されるデリゲート オブジェクトは、アプリケーションのライフ サイクルの期間中に変更されますか? それとも、アプリのライフ サイクル全体を通してシングルトン インスタンスですか?

次に、これを解決するために、タブバーを UIWindow に直接追加するのではなく、ビュー (メインウィンドウに含まれる) に追加する必要があります (タブバーアプリケーションのテンプレートで行われ、標準的な方法のようです)。このアプローチには既知の問題がありますか、それとも問題ありませんか。誰もこれを試しましたか?私にお知らせください。

ありがとうございます。

4

1 に答える 1

1

シングルトンデリゲートのインスタンスを取得するクラスは、それが何を実装しているかを知らないようです。#importデリゲートを、それを使用するクラスに送信していることを確認してください[[UIApplication sharedApplication] delegate]。また、UIApplicationが準拠していないなどの警告が表示された場合は、それをAppDelegateタイプにキャストして回避できます。

この呼び出しが何を返すかについての質問に答えるために、それはアプリのライフサイクル全体を通してシングルトンです。

2番目の質問に答えるには、UIWindow(したがってappdelegate)に含めることは問題ありません。これは、アプリのルートコントローラーであるため(物事の音から)、おそらく推奨されます。

于 2010-08-16T14:36:51.570 に答える