HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – EKEventStore获取事件返回空列表大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从我的应用程序中的特定日历中获取所有活动.我在我的应用程序中创建了日历和测试事件(需要iOS 5.0或更高版本来创建自定义日历).如果我在我的设备上运行应用程序,然后检查系统日历应用程序,然后我的日历和我创建的事件显示正确.

现在我想让我的应用程序读取这个自定义日历中的所有事件.我的事件是用startDate和endDate设置为Now(NSDate分配,没有给定timeInterval)创建的.

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:- 60 * 60 * 24 * (365 * 4 + 1)];
NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24 * 365 * 25];
NSArray *calendarList = [NSArray arrayWithObjects:tmpCal,nil];
NSPreDicate *datePreDicate = [store preDicateForEventsWithStartDate:startDate endDate:endDate calendars:calendarList];
NSArray *eventList = [store eventsmatchingPreDicate:datePreDicate];

正如你所看到的,我指定了一个时间间隔,其中生成的事件必须是.正如你也可以看到的,结束日期是从现在开始的25年,而开始日期是过去4年(闰年加一天).如果我以这种方式查询EKEventstore,我将收到以前添加的事件.如果我想把开始日期提前一个(或更多的几天或几年)回到过去,棘手的部分就开始了.那么突然之间,没有任何事情被归还.

NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:- 60 * 60 * 24 * (365 * 4 + 2)];

在NSPreDicate中NSTimeInterval的负值是否有限制?我没有发现任何文件限制.我花了大约2个小时才察觉到为什么我没有收到任何事情(原来我想要过去5年的时间以及未来5年的时间).这个好奇的行为是什么原因?任何想法?

/编辑04/11/2012
在03/31/2012和04/20/2012的开始日期创建一些事件之后,似乎是按照从现在开始的时间间隔来确定日期的事件受到4年间隔的限制.在上面的给定代码中调整我的开始日期(通过设置前一天的开始日期),我可以获得事件,直到2012年3月31日,但不能晚些.删除此调整导致从03/31/2012和04/01/2012(但不是04/20/2012)的事件.经过二次调整(设定20天后的开始日期),我甚至还有未来的事件.
我不能指定为什么会有这样的限制.可能有一些内部计算将导致使用值存储的溢出.只是一个猜测

然后我来到苹果的例子.乍一看,我不想在Apple的EKEvent编程指南中使用给定的代码.它看起来没有那么小可爱的是我的,但经过这么多的麻烦,我给了它一枪.

CFGregorianDate gregorianStartDate,gregorianEndDate;
CFTimeZoneRef timeZone = CFTimeZoneCopySystem();

gregorianStartDate.hour = 0;
gregorianStartDate.minute = 0;
gregorianStartDate.second = 0;
gregorianStartDate.day = 1;
gregorianStartDate.month = 4;
gregorianStartDate.year = 2008;

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
gregorianEndDate.hour = 23;
gregorianEndDate.minute = 59;
gregorianEndDate.second = 59;
gregorianEndDate.day = [components day];
gregorianEndDate.month = [components month];
gregorianEndDate.year = [components year] + 1;

NSDate *startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:CFGregorianDateGetAbsoluteTime(gregorianStartDate,timeZonE)];
NSDate *endDate = [NSDate dateWithTimeIntervalSinceReferenceDate:CFGregorianDateGetAbsoluteTime(gregorianEndDate,timeZonE)];
CFRelease(timeZonE);

这样我就可以从04/01/2008开始到Now()1年.那么事实证明,这里使用了同样的限制:(调整开始日期导致只有一部分事件,直到最后的事件在这4年的范围内.

深入研究表明,这种行为存在很长时间:Fetch all events from EventStore EventKit iOS

解决方法

我同意詹姆斯拉太多的事件,在今后的日子是不建议,幸运的是你可以使用遥远的拉扯,遥远的事件.

这显然不会拉动所有的事件,而是尽可能多地发生事件,导致内存或其他问题.

NSDate *endDate = [NSDate distantFuture];

希望有帮助

大佬总结

以上是大佬教程为你收集整理的ios – EKEventStore获取事件返回空列表全部内容,希望文章能够帮你解决ios – EKEventStore获取事件返回空列表所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。