3

1分の繰り返し間隔でUILocalNotification開始するように設定されています。2012-06-18 10:00

5で2012-06-18 10:05通知がトリガーされます。次に、ユーザーは通知番号 3 を選択します。通知は で発生するはず2012-06-18 10:02です。

私の- application:didReceiveLocalNotification:方法では。であるはずの通知番号3からこの発火日をプログラムで取得するにはどうすればよいですか2012-06-18 10:02。から初期/開始fireDateプロパティを取得できることは知っていますが、UILocalNotificationそれには興味がありません。この繰り返し通知のfireDateを知りたいです(最初/開始のfireDateではありません)。

UILocalNotification通知を解析せずにどのリピーターが発生したかを調べる方法を誰かが説明してくれたら- description、苦労して稼いだ報奨金の一部を差し上げます。

4

3 に答える 3

1

UILocalNotificationのfireDateを取得するための最良の代替ソリューションは、日付を計算することです。
最初のfireDateがある場合、繰り返しの間隔を使用して、特定の通知のfireDateを計算できます。

1.最初の発火日から開始します2.
通知番号/通知のインデックスを取得します
3.繰り返し間隔にインデックスを掛けて、最初の発火日に追加します

ただし、以下のリンクで説明されているように、日付の計算は、タイムゾーンや「その他の厄介なこと」のために注意が必要です。
役立つリンクは次のとおりです
。UILocalNotificationオブジェクトから次の起動日を取得する方法

そしてもちろん、descriptionメソッドを解析する最後のフォールバックソリューションがあります。[notification.fireDate description]ただし、ご存知かもしれませんが、将来的にフォーマットが変更されてコードが破損する可能性があるため、これを行うことは決して良い考えではありません。

これがお役に立てば幸いです。

編集: 例:さて、私の最初の最初のfireDateは2012-06-18 10:00
、繰り返される間隔が1分ごとであることを知っていたとしましょう。
つまり、ユーザーがuilocalnotification番号3をタップすると、2分が経過しているはずです。
したがって、その特定の通知の時間は次のとおりです2012-06-18 10:02
。これは意味がありますか?

于 2012-06-20T18:06:49.307 に答える
1

だから私はこれをもう少し考えました、そして私のコメントで言ったように、通知が処理される方法のためにそれは可能ではないようです。

あなたはそれを作成してすぐに発砲するか、それをスケジュールします。

通知は、一部の情報の単なる保存であり、そのプロパティについてのみ読み取ることを目的としています。

アプリケーションは、を通じて通知を受け取ります

application:didReceiveLocalNotification:

UILocalNotification自体のみが渡される場所。この通知には、最初に設定された一連のプロパティのみが含まれます。

繰り返し間隔は、ユーザーに再通知するためにのみ使用され、通知の内容は変更されません。

これは、達成することを期待する動作について、異なる情報を渡すことや異なるアクションを実行することを期待する場合は、異なる通知を発行する必要があるという結論に達します。

(ここで説明されているように、サブクラス化も役に立ちませんhttps://stackoverflow.com/a/8583329/1068522

于 2012-06-21T04:22:39.540 に答える
0

Q:

通知の説明を解析せずにどの繰り返し UILocalNotification が起動されたかを調べる方法を誰かが説明してくれれば、私が苦労して稼いだ報奨金の一部を差し上げます。

A: 最も簡単な方法:

- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSDateComponents *comps = [[NSCalendar currentCalendar] components:notification.repeatInterval fromDate:notification.fireDate toDate:[NSDate date] options:0];
    NSLog(@"Notification #%d", [comps minute] + 1);
}

Q:description解析せずに「次の発火日」を取得する方法は?

A:これには非公開/文書化されていない関数があります:nextFireDateForLastFireDate

- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"next: %@", [notification nextFireDateForLastFireDate:[NSDate date]]);
}

Q:通知に何らかのカウントがあるのではないでしょうか? プロパティまたはメソッド?

A:文書化されていないプロパティがあります。

@property (assign, nonatomic) int totalRepeatCount;
@property (assign, nonatomic) int remainingRepeatCount;

しかし、それらは常に同じ値を持っているようです: UILocalNotificationInfiniteRepeatCount. どちらもオペレーティング システムによって管理されるため、このプロパティまたは基になるインスタンス変数を上書きしても何も起こりません。さらに、UILocalNotifications 内では発火ごとに何も変化せず、UILocalNotification を別の UILocalNotification と区別する方法はありません (メモリ内のアドレスを除く)。次の fireDateは、現在の時刻に基づいて計算されます。

于 2012-06-21T10:51:27.533 に答える