首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子类NSCalendar?

子类NSCalendar?
EN

Stack Overflow用户
提问于 2010-08-19 21:44:05
回答 3查看 643关注 0票数 3

我正在尝试创建一个NSCalendar的子类,但是没有太多的运气。我试过两种方法:

  1. 彻底分类。我可以创建一个修改过的对象,我添加的一个测试方法(不是NSCalendar的一部分)工作得很好,但是重写的方法不起作用--例如,如果我调用dateFromComponents:,NSCalendar方法显然是被调用的,而不是我在类别NSCalendar子类中所写的方法。在这种情况下,我甚至不能创建一个实例: initWithCalendarIdentifier抛出一个_CFRequireConcreteImplementation异常。最初,我只有几个方法在子类中被覆盖,但随后我重写了所有(文档化的) 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进行子类划分。

编辑:当应用程序处于后台时,这一切都是必需的。在前台,我使用计时器,就像没有人特别建议的那样。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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]),而您不希望这样做。您传递的日历标识符是什么?也许它是在抱怨它需要一个“具体的实现”,它知道要传递的日历标识符。

票数 1
EN

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2010-08-19 22:50:21

尝试使用NSTimer方法

代码语言:javascript
运行
复制
+ (NSTimer *)scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

将重复设置为TRUE,时间间隔为2分钟。有一个设置为1或10的计数器。每次选择器被调用时,您都会递减计数器,直到当您完成工作并重置计数器时计数器达到0为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3526510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档