0

毎日同じ時間に新しいヒントが待っていることをユーザーに知らせるアプリを書いています。通知をスケジュールし、アプリがフォアグラウンドで実行されている場合に起動するコードを書くことができました。私が問題を抱えているのは、アプリがバックグラウンドにあるときに同じことを行う方法です。複雑なのは、通知自体に基づいてビューを設定していることです (どのボタンが表示されるかなど)。現時点では、メソッドのコードは次のようになります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
  (NSDictionary *)launchOptions
  {
   // Override point for customization after application launch.
    UILocalNotification *note = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    NSString *val = [note.userInfo objectForKey:1];
    if ([val isEqual: @"first"]) {

    }

    return YES;
}

私の問題は、そのifステートメント内からビューを設定する方法(つまり、ビュー内で2つのボタン[button1とbutton2と呼ぶ]を表示する方法)がわからないことです。どんな答えでも大歓迎です。これが信じられないほど明白なものである場合、私は謝罪し、少なくとも誰かが私を正しい方向に向けるようにお願いします. ありがとう

4

2 に答える 2

0

これについて100%ではありませんが、そう信じています

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
  (NSDictionary *)launchOptions

ビューのロードを開始する前に終了します。この方法の方が理にかなっています。

これを念頭に置いて、私が成功裏に使用したので、必要な情報を格納する app デリゲートに public var を設定することをお勧めします。

その後は、

- (void)viewDidLoad

アプリがフォアグラウンドにあるときと同じように、var の場合は viewController の情報を扱います。

于 2013-05-25T12:23:24.323 に答える
0

あなたの問題に対するより一般的な答えを提供しようとします.iOSプログラミングはMVC(Model-View-Controller)ソフトウェアアーキテクチャパターンに基づいているため、アプリケーションを可能な限りMVCに準拠させる必要があります. これは、あなたの場合、ローカル通知を受け取るとすぐに、アプリがフォアグラウンドで実行されているか、バックグラウンドでスリープしているか、または単に最初から起動する準備ができていても、MVC ブリックが動作する場合、アプリは同じように動作することを意味します。正しく設定されています。

そう:

  • ローカル通知はアプリに新しいデータを提供するため、モデルを更新する必要があります
  • モデルを更新したら、アプリ ビュー コントローラーにモデルの変更を通知します。
  • View Controller が表示されている場合は、モデルを表すビューの変更が反映されます。表示されていない場合は、アプリで View Controller を表示してから、モデルのステータスに基づいてビューを更新する必要があります。

これを行う方法は明らかに、アプリがさまざまなビューを表示する方法と場所によって異なりますが、物事をシンプルに保つために次のことができます。

  • 起動時のローカル通知を反映するモデルを作成する (application:didFinishLaunchingWithOptions:)
  • 起動時にローカル通知データを表示するView Controllerを作成します(注:モデルを提供してView Controllerを「初期化」します。ビューはまだ気にしません)
  • モデルとView Controllerが初期化された後、ローカル通知を処理します

したがって、ローカル通知を受け取ると、アプリは次のようになります。

  • モデルを更新します (これは、アプリがフォアグラウンドにある場合、またはスリープから再開する場合、または最初から開始する場合の 3 つのケースすべてに存在します)
  • この時点で、ビュー コントローラー ビューが既に表示されている場合は、新しいモデル データで更新するだけです。表示されていない場合は、ビュー階層にビュー コントローラー ビューを追加します (たとえば、メインのナビゲーション コントローラー スタックにプッシュすることによって)。ビューの更新は、viewDidLoad によって行われます。

ご覧のとおり、これを管理するための特別なコードは必要ありませんが、アプリが通知を受け取ったときにローカル通知関連のビューを表示する必要はありません。ローカル通知ビューがビュー階層の奥深くにあり、ある程度の一貫性を維持する必要がある場合、明らかに事態ははるかに複雑になります。そのような場合、階層全体を再構築する必要があり、これを行う可能性はローカル通知によって提供される情報に依存します。単純なケースでは、メイン ナビゲーション コントローラーをインスタンス化した後、メイン ウィンドウ階層のすぐ内側にローカル通知ビュー コントローラーを配置できます: [applicationWindow setRootController:mainNavigationController] ローカル通知コントローラーをナビゲーション コントローラー スタックにプッシュします。 [mainNavigationController pushViewController:myLocalNotificationViewController アニメーション:YES]

特定の問題の詳細を入力していない場合は申し訳ありませんが(できません)、おそらく私の説明は、あなたのケースが特別なケースではなく、メインのiOSアーキテクチャパターンに注意深く従うことで簡単に管理できることを理解するのに役立ちます. .

于 2013-05-25T13:02:10.437 に答える