ユーザーが最初にアプリケーションを開くと、私は日付を保存し、毎日特定の時間に30日間、地元の通知を送信するというアプリがあります。毎日違う必要があります。各メッセージは、その日の出来事を思い出させるものです。設定された日数のための別のUIlocalnotificationを起動しない
はAppdelegateで私はその後、私は現在の日付に1日を追加して、私のschedulenotificatonsメソッドを呼び出すforループを持っている
loadNotif方法で- (void)applicationDidEnterBackground:(UIApplication *)application {
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [NSDate date];
NSLog(@"date : %@",date);
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; // <- Local time zone
NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date];
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date];
NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset;
NSDate *destinationDate = [[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date];
NSLog(@"date : %@",destinationDate);
[self loadNotif:destinationDate];
}
があるメソッドを呼び出して、現在の時刻に日付を設定しました
-(void)loadNotif:(NSDate *)notifDate {
NSLog(@" date %@", notifDate);
NSString *alertMSG = @"";
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
for (int i = 0; i <= 3; i++) {
dayComponent.second = i;
if (i == 0) {
alertMSG = @"Checkout Today's Video! Sustainable Posture!";
} else if (i == 1) {
alertMSG = @"Checkout Today's Video! Forward Head!";
} else if (i == 2) {
alertMSG = @"Checkout Today's Video! Neck Position!";
} else if (i == 3) {
alertMSG = @"Checkout Today's Video! Shoulder Position!";
}
notifDate = [notifDate dateByAddingTimeInterval:5];
[self scheduleNotificationForDate:notifDate AlertBody:alertMSG ActionButtonTitle:@"30 Day Posture Challenge" NotificationID:alertMSG];
NSLog(@"nextDate: %@ ... %@", notifDate, alertMSG);
}
}
テスト目的のために、私は彼らが働いているかどうかを確認するために5秒追加しています。
-(void) scheduleNotificationForDate:(NSDate *)date AlertBody:(NSString *)alertBody ActionButtonTitle:(NSString *)actionButtonTitle NotificationID:(NSString *)notificationID{
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
NSLog(@"firedate %@", date);
localNotification.fireDate = date;
localNotification.timeZone = [NSTimeZone localTimeZone];
localNotification.alertBody = alertBody;
localNotification.alertAction = actionButtonTitle;
localNotification.soundName=UILocalNotificationDefaultSoundName;
localNotification.applicationIconBadgeNumber= + 1;
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:notificationID forKey:@"notifID"];
localNotification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
私が抱えている問題は、すべての通知を同時に発生させることです。これがなぜ起こっているのか?
ログメッセージの内容は何ですか? – matt
ログメッセージは、firedateが正しく機能することを示しています。 5秒で各ループが追加された2016-10-20 20:10:41.328 firedate 2016-10-20 20:10:46 +0000 firedate 2016-10-20 20:10:51 +0000 –
私が考えることができる唯一のことたぶん5秒はあまりに細かすぎます。システムはあなたのためにこれらの事柄を提供しているので、それらを一緒にまとめる方法を判断します。だからそれは目的にそれらを組み合わせているかもしれません。それで、たとえそれが苦痛であっても、それを数分置き、あなたがどう行くかを見てください。 – matt