我正在开发一项功能,允许用户安排接收通知的日期和时间。
到目前为止,时间和消息功能都很有效。我被困在哪里是重复间隔。
以下是我的尝试:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *formatedDate = [dateFormatter stringFromDate:self.datePicker.date];
self.currentTimeLabel.text = formatedDate;
NSDate *date = [dateFormatter dateFromString:self.currentTimeLabel.text];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
NSInteger hour = [components hour];
NSInteger minute = [components minute];
[components setHour:hour];
[components setMinute:minute];
if ([self.currentRepeatLabel.text containsString:@"Sun"]) {
[components setWeekday:0];
self.notification = [[UILocalNotification alloc] init];
self.notification.fireDate = [calendar dateFromComponents:components];
self.notification.repeatInterval = NSCalendarUnitDay;
[self.notification setAlertBody:[NSString stringWithFormat:@"A friendly reminder: %@", self.titleStringToDisplay]];
if (self.soundSwitch.isOn == YES) {
self.notification.soundName = @"soundeffect.wav";
}
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:self.titleStringToDisplay forKey:@"title"];
self.notification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:self.notification];
}
if ([self.currentRepeatLabel.text containsString:@"Mon"]) {
[components setWeekday:1];
self.notification = [[UILocalNotification alloc] init];
self.notification.fireDate = [calendar dateFromComponents:components];
self.notification.repeatInterval = NSCalendarUnitDay;
[self.notification setAlertBody:[NSString stringWithFormat:@"A friendly reminder: %@", self.titleStringToDisplay]];
if (self.soundSwitch.isOn == YES) {
self.notification.soundName = @"soundeffect.wav";
}
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:self.titleStringToDisplay forKey:@"title"];
self.notification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:self.notification];
}
// I'm doing this for each day.
NSCalendarUnitDay
每天都在重复我的通知,无论我选择了什么日子。我已尝试过NSCalendarUnitWeekOfYear
,但在使用时我的通知从未触发过。
目标是让用户设置标题,时间和重复天数(非常类似于原生闹钟应用)。
如何为此设置重复间隔?
更新和新问题:
我现在正在使用NSCalendarUnitWeekOfYear
。
这是我的问题......现在不再触发通知,并且repeatInterval始终设置为星期一,而不是代码中的星期几。
答案 0 :(得分:0)
有几种方法可以做到这一点。您可以使用NScalender查找工作日,然后计算要通知的日期。
-(void) calculateweeknumber
{
NSCalendar *numberCalendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [numberCalendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
[comps setSecond:0.0];
weekday = [comps weekday];
NSLog(@"number is %d",weekday);
}
答案 1 :(得分:0)
您的代码存在很多问题。
您的日期显然来自UIDatePicker
。你应该使用这个日期。来回转换是无稽之谈。
此外,摆脱所有重复的代码。它使得理解(和修复)代码变得更加困难。它隐藏了逻辑。
但真正的问题是你只需将日期组件设置为日期。它不是。您将从一些投入组件的日期开始,然后设置工作日。这不会给出另一个有效的日期 - 为什么要这样?怎么可能呢?它应该调整什么?那天?这个月?那一年?走向未来还是走向过去?转换为约会时,工作日似乎被忽略了。
您需要计算一个正确的日期(this answer描述计算下一个星期一)。