我正在尝试创建一个NSCalendar的子类,但是没有太多的运气。我试过两种方法:
子类NSCalendar是可能的吗?
我想这样做的原因是要用非标准的重复间隔重复本地通知。默认功能允许本地通知重复每个日历单元,但我需要不规则的间隔--例如,我可以通过创建4个“每小时”通知来模拟“每15分钟”通知,但我需要它们触发,比如T+20、T+22、T+24、T+44、T+46、T+66分钟等等(T是开始时间)--通知之间的间隔是20分钟,然后是2分钟,然后又是20分钟等等。
我希望,既然UILocalNotification想要一个NSCalendar (在repeatCalendar属性中)来计算何时触发下一个通知,我可以通过重写(比方说,dateFromComponents )来实现我想要的,即只返回间隔在20到2分钟之间的NSDate dateWithIntervalSinceNow --但是我的狡猾的计划似乎有一个大问题,因为无法对NSCalendar进行子类划分。
编辑:当应用程序处于后台时,这一切都是必需的。在前台,我使用计时器,就像没有人特别建议的那样。
发布于 2010-08-20 00:50:34
即使您确实成功地将NSCalendar子类分类,我也怀疑它是否会起作用。我强烈怀疑本地通知是由SpringBoard安排的,而且我认为它不会在每次需要查看下一个火灾日期时启动/恢复应用程序。
第一步是找出UILocalNotification对你的日历做了什么。最简单的方法是编写一个NSObject子类,它转发未定义的方法调用并打印日志消息(respondsToSelector:,methodSignatureForSelector:,forwardInvocation:)。通常,您需要类似于if ([super respondsToSelector:selector]) { return [super ...]; } else { return [target ...]; }的东西。
然后,最简单的方法是编写一个类,为您的目的实现必要的NSCalendar方法。
您还可以考虑调用[super init];-[NSCalendar initWithCalendarIdentifier:]很可能返回一个不同的self (例如[self release]; return [[NSGregorianCalendar alloc] init]),而您不希望这样做。您传递的日历标识符是什么?也许它是在抱怨它需要一个“具体的实现”,它知道要传递的日历标识符。
发布于 2010-08-20 01:36:33
直接继承NSCalendar很棘手,因为我认为它是一个类集群。我对这个概念有点模糊,所以我会给你一个指向苹果文档的链接,而不是让我自己更愚蠢。
http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34
发布于 2010-08-19 22:50:21
尝试使用NSTimer方法
+ (NSTimer *)scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:将重复设置为TRUE,时间间隔为2分钟。有一个设置为1或10的计数器。每次选择器被调用时,您都会递减计数器,直到当您完成工作并重置计数器时计数器达到0为止。
https://stackoverflow.com/questions/3526510
复制相似问题