我目前正在处理本地通知。
- (void)viewDidAppear:(BOOL)animated {
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]];
[components setHour:uhrzeit];
_date_today = [calendar dateFromComponents:components];
if (akt_tag != proj_tag) {
_date_final = [NSDate dateWithTimeInterval:(86400*(proj_tag - akt_tag)) sinceDate:_date_today];
}
else {
_date_final = [NSDate dateWithTimeInterval:0 sinceDate:_date_today];
}
NSLog(@"%@", _date_final);
}
- (IBAction)erinnerung:(id)sender {
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"It's Notific Time!";
notification.soundName = @"benachrichtigung.mp3";
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:[_date_final timeIntervalSinceDate:[NSDate date]]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
[notification release];
}
但是我收到了这个错误(更准确:atfication.fireDate):
2013-03-23 12:50:21.303 Notific [4593:907] - [NSISRestrictedToNonNegativeMarkerVariableToBeMinimized timeIntervalSinceDate:]:无法识别的选择器发送到实例0x1dd514b0 2013-03-23 12:50:21.305 Notific [4593:907] *由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [NSISRestrictedToNonNegativeMarkerVariableToBeMinimized timeIntervalSinceDate:]:无法识别的选择器发送到实例0x1dd514b0' * 第一次抛出调用堆栈: (0x337723e7 0x3b463963 0x33775f31 0x3377464d 0x336cc208 0x56b33 0x3566c087 0x3566c03b 0x3566c015 0x3566b8cb 0x3566bdb9 0x355945f9 0x355818e1 0x355811ef 0x372985f7 0x37298227 0x337473e7 0x3374738b 0x3374620f 0x336b923d 0x336b90c9 0x3729733b 0x355d52b9 0x4ae5f 0x3b890b20) libc ++ abi.dylib:terminate调用抛出异常
你能告诉我这里的问题是什么吗?
答案 0 :(得分:0)
您没有保留_date_final
。因此,当您尝试在函数erinnerung
中访问它时,_date_final
的对象无效。
通过以下方式更改您的代码:
if (akt_tag != proj_tag) {
_date_final = [NSDate dateWithTimeInterval:(86400*(proj_tag - akt_tag)) sinceDate:_date_today];
}
else {
_date_final = [NSDate dateWithTimeInterval:0 sinceDate:_date_today];
}
[_date_final retain];
答案 1 :(得分:0)
UILocalNotification *notif = [[UILocalNotification alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComp = [[NSDateComponents alloc] init];
if (akt_tag != proj_tag) {
// after One Day
[dateComp setDay:1];
}
NSLog(@"Year: %i, Month: %i, Day: %i, Time:%i:%i\n",[dateComp year], [dateComp month],
[dateComp day], [dateComp hour], [dateComp minute]);
NSDate *fireDate = [gregorian dateByAddingComponents:dateComp toDate:[NSDate date] options:0];
notif.fireDate = fireDate;
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.alertBody = @"Your NOtification Message";
[[UIApplication sharedApplication] scheduleLocalNotification:notif];