- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试检查某个 nsdate 是否在我的事件存储中。当前月份的事件存储在 NSMutableArray
中。我正在使用这些函数来创建事件存储并获取其中的对象:
- (void) viewDidLoad{
[super viewDidLoad];
self.almacenEventos = [EKEventStore new];
self.listaEventos = [NSMutableArray new];
self.calendario = [self.almacenEventos defaultCalendarForNewEvents];
[self.listaEventos addObjectsFromArray:[self monthEvents]];
}
-(NSArray *) monthEvents{
NSDate *firstMonthDay = [NSDate firstDayOfCurrentMonth];
NSDate *lastMonthDay = [NSDate firstDayOfNextMonth];
NSArray *calendarios = [[NSArray alloc]initWithObjects:self.calendario, nil];
NSPredicate * predicado = [self.almacenEventos predicateForEventsWithStartDate:firstMonthDay endDate:lastMonthDay calendars:calendarios];
return [self.almacenEventos eventsMatchingPredicate:predicado];
}
firstDayOfCurrentMonth
和 firstDayOfNextMonth
将正确返回当前月份的日期。初始化后,self.listaEventos
拥有所有当前月份的事件。
检查 self.almacenEventos
是否包含 NSDate
时会出现问题。我正在使用 tapku 日历来显示月份网格。并遵循开发人员和其他第 3 方帮助的所有说明。
我调试了代码,试图找出问题所在。 “d”是要比较的日期,返回长格式 2012-08-29 00:00:00 +0000。
单个事件的日期格式为:
startDate = 2012-08-04 22:00:00 +0000;
endDate = 2012-08-05 21:59:59 +0000;
所以我被困在这个函数的中间,数组中存在给定日期的对象。如果我使用手动日期数组而不是事件数组,它就像一个魅力......那么我在这里做错了什么?它是返回的 NSDateComponents
吗?我该怎么做?非常感谢
- (NSArray*) checkDate:(TKCalendarMonthView*)monthView marksFromDate:(NSDate*)startDate toDate:(NSDate*)lastDate{
NSMutableArray *marks = [NSMutableArray array];
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *comp = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:startDate];
NSDate *d = [NSDate new];
d = [cal dateFromComponents:comp];
// Init offset components to increment days in the loop by one each time
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
// for each date between start date and end date check if they exist in the data array
while (YES) {
// Is the date beyond the last date? If so, exit the loop.
// NSOrderedDescending = the left value is greater than the right
if ([d compare:lastDate] == NSOrderedDescending) {
break;
}
// If the date is in the data array, add it to the marks array, else don't
if ([self.listaEventos containsObject:d]) {
[marks addObject:[NSNumber numberWithBool:YES]];
} else {
[marks addObject:[NSNumber numberWithBool:NO]];
}
// Increment day using offset components (ie, 1 day in this instance)
d = [cal dateByAddingComponents:offsetComponents toDate:d options:0];
}
return [NSArray arrayWithArray:marks];
}
最佳答案
checkDate:marksFromDate:toDate
方法期望 self.listaEventos
是一个 NSMutableDictionary
,由包含 EKEvent 数组的日期索引
:
// There are events on these 4 dates
self.listaEventos = {
"2012-08-15 00:00:00 +0000" = (...),
"2012-08-17 00:00:00 +0000" = (...),
"2012-08-18 00:00:00 +0000" = (...),
"2012-08-29 00:00:00 +0000" = (...)
}
我会将 monthEvents
更改为如下内容:
-(NSMutableDictionary *) monthEvents{
NSMutableDictionary *retVal;
NSDate *firstMonthDay = [NSDate firstDayOfCurrentMonth];
NSDate *lastMonthDay = [NSDate firstDayOfNextMonth];
NSArray *calendarios = [[NSArray alloc]initWithObjects:self.calendario, nil];
NSPredicate * predicado = [self.almacenEventos predicateForEventsWithStartDate:firstMonthDay endDate:lastMonthDay calendars:calendarios];
NSArray *results = [self.almacenEventos eventsMatchingPredicate:predicado];
// Next add all events to our dictionary indexed by date
for (EKEvent *evt in events) {
NSDate *dateKey = [self dateWithoutTime:evt];
// A date may have multiple events. Get all current events for the date
NSArray *eventsForDate = [retVal objectForKey:dateKey];
// If no events were set for the date
if (![eventsForDate isKindOfClass:[NSArray class]]) {
// create an array using a factory method
eventsForDate = [NSArray arrayWithObject:evt];
} else {
// append the object to our array of events
eventsForDate = [eventsForDate arrayByAddingObject:evt];
}
// Update the dictionary
[retVal setObject:eventsForDate forKey:dateKey];
}
return retVal;
}
- (NSDate *)dateWithoutTime:(NSDate *)date
{
TKDateInformation info = [date dateInformationWithTimeZone:[NSTimeZone systemTimeZone]];
// lop off hour/minute/seconds so all dates for the day are equal
info.hour = 0;
info.minute = 0;
info.second = 0;
return [NSDate dateFromDateInformation:info timeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
}
关于ios - 检查 NSDate 是否在 EKEventStore 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815442/
我的应用程序中有两个 UIDatePicker 控件,一个配置了 UIDatePickerModeDate,另一个配置了 UIDatePickerModeTime。 我想配置一个 NSDate 对象,
我可以通过此代码获取 iPhone 的当前日期 NSDate *currentDate = [NSDate date]; NSDateFormatter *dateFormatter1 = [[NSD
我在 Swift 中有一个模型,它有一个名为 expirationDate 的 NSDate 字段,我想根据当前时间计算过期前的剩余小时数日期。 有没有一种简单的方法可以利用现有的 NSDate 功能
我将我的 NSDate 存储到一个文件中,该文件采用您在 NSDate 上调用描述时获得的国际格式。 但是,我不知道如何从字符串格式返回到 NSDate 对象。 NSDateFormatter 似乎仅
我有兴趣创建一种方法来查找当前日期是否落在任何给定日期的特定时间之间。这是一个调度程序,所以我想找到当前时间正在发生什么事件。每天都有相同的时间集:820-900、900-940、940-1020 等
我有一个约会时间: Friday, July 8, 2016 at 6:30:00 PM India Standard Time 我想要这样的约会时间: Friday, July 8, 2016 at
我有一个 NSDate 对象。假设它代表“1-10-2011” NSDate *date = [df dateFromString:@"2011-10-01 00:00:00"]; 由于我所在的时区,
我从 Django API 获取 NSString 2012-08-17T10:56:45.508205 作为时间。 我正在尝试使用以下代码将该字符串转换为 NSDate 对象: NSDateForm
我在获取一系列 NSDates 与另一个 NSDates 范围相交的天数时遇到问题。 场景 1: 主要范围:3月8日-6月8日 检查范围:4月8日-5月8日 那么相交的天数就是4月8日-5月8日的天数
我知道如何获取两个 NSDate 之间的差异,如下所示 NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:anyPr
我需要根据另一个 NSDate 获取一天中特定时间的 NSDate。例如,如果我有一个代表 2015 年 5 月 10 日已知时间的 NSDate,我需要能够获得一个代表 2015 年 5 月 10
升级到1.2后出现编译错误: NSDate?! is not convertible to NSDate 代码: let dateCreated = photoCommentObjects[index
这是我的代码。但是一个错误说,不能用类型的参数列表调用 dateComponent... let fromDate = NSDate(timeIntervalSince1970: TimeInter
给定一个引用日期,我需要找到下面的“星期三”。 需要说明的是,如果引用日期是星期二,那么它应该返回同一周的星期三。 如果引用日期是星期三或更晚,则需要返回从下周开始的下一个星期三。 重要的是它不会返回
我有 NSDate* day1 和 NSDate* day2。我如何通过只复制第 1 天的年/月/日和第 2 天的小时/分钟/秒来制作 NSDate* day3? 最佳答案 unsigned unit
我有两个 NSDate 对象,我想要两者之间的差异,结果应该再次是一个 NSDate 对象。知道如何实现这一目标吗? 在这里,我试图解决一个独特的问题,我必须找出耗时,然后本地化耗时。如果我在 NSD
我试图强制用户使用日期选择器选择 future 的日期。我显然使用了compare:方法,但是,当我执行以下代码时,即使它与[NSDate date]相同的日期,它也会告诉执行if语句。这是我的代码:
我有两个用户选择的日期:开始日期和结束日期。它们是 NSDate 实例,我必须将它们作为 NSNumber 的参数发送。如何以秒为单位将它们转换为 NSNumber? 最佳答案 使用下面的代码: N
我对将 NSTimeInterval 转换为 NSDate 感到困惑,我有两个日期要比较,一个来自服务器,另一个在本地, 在服务器案例中,我以时间间隔格式获取日期,因此我也必须对本地数据执行相同的操作
我有一个从服务器获取的字符串 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"我通过这个 formate 将这个字符串转换成 NSDate。 class func convertUTCDat
我是一名优秀的程序员,十分优秀!