0

ユニバーサルアプリのAppDelegateに複数のローカル通知を設定しました。正確には14です。これらの通知には、発火すべき特定の時間と平日があります。

問題は、これらの通知がすべて毎日発生することです。

たとえば、土曜日の朝に通知を設定していますが、毎日表示されています。

通知が毎日配信される理由について、提案や指示を教えてください。解決策が見つからないようです。

私のコードをチェックしてください、ありがとう!

AppDelegate.m

- (void)applicationDidEnterBackground:(UIApplication *)application {
/*
 Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
 If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
 */


NSCalendar *gregCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent = [gregCalendar components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent setWeekday:2];
[dateComponent setHour:11];
[dateComponent setMinute:44];



UILocalNotification *notification = [[UILocalNotification alloc]init];
[notification setAlertBody:@"GOOD MORNING!"];
[notification setFireDate:[gregCalendar dateFromComponents:dateComponent]];
notification.repeatInterval = NSWeekdayCalendarUnit;
[notification setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];


NSCalendar *gregCalendar1 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent1 = [gregCalendar1 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent1 setWeekday:3];
[dateComponent1 setHour:11];
[dateComponent1 setMinute:44];




UILocalNotification *notification1 = [[UILocalNotification alloc]init];
[notification1 setAlertBody:@"GOOD MORNING!"];
[notification1 setFireDate:[gregCalendar1 dateFromComponents:dateComponent1]];
notification1.repeatInterval = NSWeekdayCalendarUnit;
[notification1 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification1];



NSCalendar *gregCalendar2 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent2 = [gregCalendar2 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent2 setWeekday:4];
[dateComponent2 setHour:11];
[dateComponent2 setMinute:44];



UILocalNotification *notification2 = [[UILocalNotification alloc]init];
[notification2 setAlertBody:@"GOOD MORNING!"];
[notification2 setFireDate:[gregCalendar2 dateFromComponents:dateComponent2]];
notification2.repeatInterval = NSWeekdayCalendarUnit;
[notification2 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification2];

NSCalendar *gregCalendar3 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent3 = [gregCalendar3 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent3 setWeekday:5];
[dateComponent3 setHour:11];
[dateComponent3 setMinute:44];




UILocalNotification *notification3 = [[UILocalNotification alloc]init];
[notification3 setAlertBody:@"GOOD MORNING!"];
[notification3 setFireDate:[gregCalendar3 dateFromComponents:dateComponent3]];
notification3.repeatInterval = NSWeekdayCalendarUnit;
[notification3 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification3];

NSCalendar *gregCalendar4 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent4 = [gregCalendar4 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent4 setWeekday:6];
[dateComponent4 setHour:11];
[dateComponent4 setMinute:44];




UILocalNotification *notification4 = [[UILocalNotification alloc]init];
[notification4 setAlertBody:@"GOOD MORNING!"];
[notification4 setFireDate:[gregCalendar4 dateFromComponents:dateComponent4]];
notification4.repeatInterval = NSWeekdayCalendarUnit;
[notification4 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification4];





NSCalendar *gregCalendar5 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent5 = [gregCalendar5 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent5 setWeekday:2];
[dateComponent5 setHour:14];
[dateComponent5 setMinute:59];




UILocalNotification *notification5 = [[UILocalNotification alloc]init];
[notification5 setAlertBody:@"GOOD AFTERNOON!"];
[notification5 setFireDate:[gregCalendar5 dateFromComponents:dateComponent5]];
notification5.repeatInterval = NSWeekdayCalendarUnit;
[notification5 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification5];

NSCalendar *gregCalendar6 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent6 = [gregCalendar6 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent6 setWeekday:3];
[dateComponent6 setHour:14];
[dateComponent6 setMinute:59];



UILocalNotification *notification6 = [[UILocalNotification alloc]init];
[notification6 setAlertBody:@"GOOD AFTERNOON!"];
[notification6 setFireDate:[gregCalendar6 dateFromComponents:dateComponent6]];
notification6.repeatInterval = NSWeekdayCalendarUnit;
[notification6 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification6];


NSCalendar *gregCalendar7 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent7 = [gregCalendar7 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent7 setWeekday:4];
[dateComponent7 setHour:14];
[dateComponent7 setMinute:59];




UILocalNotification *notification7 = [[UILocalNotification alloc]init];
[notification7 setAlertBody:@"GOOD AFTERNOON!"];
[notification7 setFireDate:[gregCalendar7 dateFromComponents:dateComponent7]];
notification7.repeatInterval = NSWeekdayCalendarUnit;
[notification7 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification7];

NSCalendar *gregCalendar8 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent8 = [gregCalendar8 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent8 setWeekday:5];
[dateComponent8 setHour:14];
[dateComponent8 setMinute:59];




UILocalNotification *notification8 = [[UILocalNotification alloc]init];
[notification8 setAlertBody:@"GOOD AFTERNOON!"];
[notification8 setFireDate:[gregCalendar8 dateFromComponents:dateComponent8]];
notification8.repeatInterval = NSWeekdayCalendarUnit;
[notification8 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification8];

NSCalendar *gregCalendar9 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent9 = [gregCalendar9 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent9 setWeekday:6];
[dateComponent9 setHour:14];
[dateComponent9 setMinute:59];




UILocalNotification *notification9 = [[UILocalNotification alloc]init];
[notification9 setAlertBody:@"GOOD AFTERNOON!"];
[notification9 setFireDate:[gregCalendar9 dateFromComponents:dateComponent9]];
notification9.repeatInterval = NSWeekdayCalendarUnit;
[notification9 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification9];

NSCalendar *gregCalendar10 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent10 = [gregCalendar10 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent10 setWeekday:6];
[dateComponent10 setHour:19];
[dateComponent10 setMinute:59];



UILocalNotification *notification10 = [[UILocalNotification alloc]init];
[notification10 setAlertBody:@"FRIDAY NIGHT!"];
[notification10 setFireDate:[gregCalendar10 dateFromComponents:dateComponent10]];
notification10.repeatInterval = NSWeekdayCalendarUnit;
[notification10 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification10];

NSCalendar *gregCalendar11 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent11 = [gregCalendar11 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent11 setWeekday:7];
[dateComponent11 setHour:9];
[dateComponent11 setMinute:59];




UILocalNotification *notification11 = [[UILocalNotification alloc]init];
[notification11 setAlertBody:@"HAVE A GREAT WEEKEND!"];
[notification11 setFireDate:[gregCalendar11 dateFromComponents:dateComponent11]];
notification11.repeatInterval = NSWeekdayCalendarUnit;
[notification11 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification11];

NSCalendar *gregCalendar12 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent12 = [gregCalendar12 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent12 setWeekday:7];
[dateComponent12 setHour:14];
[dateComponent12 setMinute:58];




UILocalNotification *notification12 = [[UILocalNotification alloc]init];
[notification12 setAlertBody:@"ENJOY YOUR WEEKEND!"];
[notification12 setFireDate:[gregCalendar12 dateFromComponents:dateComponent12]];
notification12.repeatInterval = NSWeekdayCalendarUnit;
[notification12 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification12];

NSCalendar *gregCalendar13 = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponent13 = [gregCalendar13 components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];


[dateComponent13 setWeekday:7];
[dateComponent13 setHour:19];
[dateComponent13 setMinute:58];




UILocalNotification *notification13 = [[UILocalNotification alloc]init];
[notification13 setAlertBody:@"SATURDAY NIGHT PARTY!"];
[notification13 setFireDate:[gregCalendar13 dateFromComponents:dateComponent13]];
notification13.repeatInterval = NSWeekdayCalendarUnit;
[notification13 setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification13];



}

ありがとう!

4

2 に答える 2

4

特定の曜日の特定の時間に通知を送信するには、次のコードが機能する必要があります。

NSCalendar *gregCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponent = [gregCalendar components:NSYearCalendarUnit  | NSWeekCalendarUnit fromDate:[NSDate date]];

[dateComponent setWeekday:2]; // For Monday
[dateComponent setHour:11];
[dateComponent setMinute:44];

NSDate *fireDate = [gregCalendar dateFromComponents:dateComponent];

UILocalNotification *notification = [[UILocalNotification alloc]init];
[notification setAlertBody:@"GOOD MORNING!"];
[notification setFireDate:fireDate];
notification.repeatInterval = NSWeekCalendarUnit;
[notification setTimeZone:[NSTimeZone defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

最初の部分は、次の月曜日または前の月曜日の日付を計算します。2番目の部分は、1週間の繰り返し間隔で通知を定義します。

発火日が前月曜日であるかどうかは関係ありません。「次の発火日」は自動的に翌週に調整されます。(で確認できますNSLog(@"%@", notification)。)

于 2013-03-18T21:29:27.747 に答える
1

これらの行により、通知が1日間隔で繰り返されます。

notification.repeatInterval = NSWeekdayCalendarUnit;

それらの行を削除すると、問題が解決するはずです。ドキュメントには、このプロパティの機能が正確に記載されています。

週次(NSWeekCalendarUnit)や年次(NSYearCalendarUnit)などのカレンダー単位を割り当てると、システムは指定された間隔で配信するように通知を再スケジュールします。デフォルト値は0です。これは、繰り返さないことを意味します。

于 2013-03-18T18:34:34.090 に答える