3

アプリは を受け取りUILocalNotificationますが、ユーザーが起動UITableViewController時にいる場合、テーブル ビュー (スケジュールされた通知を含む) はリロードされません。ユーザーはそのビューから出て、ビューを再度読み込む必要があります。これにより、セルが読み込まれ、通知が既に発生しているため、そのテーブル ビューのどのセルにも表示されなくなります。

問題は次のとおりです。ユーザーが、発生したばかりの通知を含む特定の tableView セルに触れると、アプリがクラッシュし、通知が存在しなくなります。

可能な限りすべての場所に実装しましたが- (void)reloadData、まだリアルタイムでロードされません。

これに対するより良い解決策は何ですか?

その他の詳細、通知が表示された後 (電話がロックされているときにユーザーがアプリのアイコンをスライドさせたとき)、特定のビューをプッシュするにはどうすればよいですか?

私の最初のアプリを公開するための最後の詳細が残っているので、どんな助けも本当に感謝しています.

4

1 に答える 1

1

あなたが説明する問題は、現在のローカル通知が原因です。通知が処理されている間、スケジュールされた通知のリストにまだあるため、テーブルビューを更新しても効果はありません。この問題の解決策は、通知が処理されるまでテーブル ビューの再読み込みを延期することです。

// In your app delegate
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.localNotificationsController reloadDataIfNeeded];
    });
}

// In your controller that shows the local notifications
- (void)reloadDataIfNeeded
{
    if (![self isViewLoaded]) return;

    [self.tableView reloadData];
}

一度だけ起動する通知のみを使用する場合は、リストから通知を削除することもできます (通知が消えることを確実にするため):

// In your app delegate
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    [application cancelLocalNotification:notification];
    [self.localNotificationsController reloadDataIfNeeded];
}

質問の 2 番目の部分 (「通知が表示された後 (電話がロックされているときにユーザーがアプリのアイコンをスライドさせたとき)、特定のビューをプッシュするにはどうすればよいですか?」) については、アプリケーションをアクティブにする方法が 2 つあります。ローカル通知。

  1. アプリケーションは中断されましたが、まだメモリ内にあります。次に、ローカル プッシュ通知を選択すると、アプリがフォアグラウンドに入り、-application:didReceiveLocalNotification:呼び出されて[application applicationState]UIApplicationStateInactive
  2. アプリケーションは実行されていません。つまり、中断されておらず、メモリ内にもありません。launchOptions次に、次のローカル通知を受け取ります-application:didFinishLaunchingWithOptions:

    UILocalNotification *localNotification = [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    

    ドキュメントに記載されている内容にもかかわらず、この場合は呼び出され-application:didReceiveLocalNotification:ません。

したがって、アプリケーションを起動した通知を表示するには、これら 2 つのケースでコントローラーをプッシュします。

于 2012-06-24T13:19:46.257 に答える