Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 亚类化NSCalendar?_Iphone - Fatal编程技术网

Iphone 亚类化NSCalendar?

Iphone 亚类化NSCalendar?,iphone,Iphone,我正在尝试创建NSCalendar的一个子类,但运气不好。我试过两种方法: 彻底分类。我可以创建一个修改过的对象和一个我添加的测试方法(不是NSCalendar的一部分)工作得很好,但重写的方法不起作用-例如,如果我调用dateFromComponents:,则NSCalendar方法显然被调用,而不是我在类别定义中编写的方法 正则子类。在这种情况下,我甚至无法创建一个实例:initWithCalendarIdentifier抛出一个_CFRequireConcreteImplementatio

我正在尝试创建NSCalendar的一个子类,但运气不好。我试过两种方法:

  • 彻底分类。我可以创建一个修改过的对象和一个我添加的测试方法(不是NSCalendar的一部分)工作得很好,但重写的方法不起作用-例如,如果我调用dateFromComponents:,则NSCalendar方法显然被调用,而不是我在类别定义中编写的方法

  • 正则子类。在这种情况下,我甚至无法创建一个实例:initWithCalendarIdentifier抛出一个_CFRequireConcreteImplementation异常。起初,我在子类中只重写了几个方法,但后来我重写了所有(有文档记录的)NSCalendar方法,结果是一样的

  • 甚至可以将NSCalendar子类化吗

    我想这样做的原因是以非标准的重复间隔重复本地通知。默认功能允许本地通知每[日历单位]重复一次,但我需要不规则的间隔-例如,我可以通过每隔15分钟创建4个“每小时”通知来模拟“每15分钟”通知,但我需要它们在T+20、T+22、T+24、T+44、T+46、T+66分钟等时间触发(T是开始时间)-通知间隔为20分钟,然后是2分钟,然后是20分钟,依此类推

    我希望,由于UILocalNotification需要一个NSCalendar(在repeatCalendar属性中)来计算何时触发下一个通知,因此我可以通过覆盖dateFromComponents来实现我想要的,比如说,只返回[NSDate DateWithIntervalenceNow]间隔时间在20到2分钟之间,但我的巧妙计划似乎有一个大问题,因为无法将NSCalendar子类化


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

    尝试使用NSTimer方法

    + (NSTimer *)scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
    

    将重复设置为TRUE,时间间隔为2分钟。将计数器设置为1或10。每次调用选择器时,当您执行工作并重置计数器时,您都会将计数器递减到0。

    即使您成功地将NSCalendar子类化,我怀疑它是否会工作。我强烈怀疑SpringBoard安排了本地通知,我不认为它会在每次需要查看下一个fire日期时启动/恢复你的应用程序

    第一步是找出UILocalNotification对日历的作用。最简单的方法是编写一个NSObject子类,它转发未定义的方法调用并打印日志消息(respondsToSelector:,methodSignatureForSelector:,forwardInvocation:)。通常,您需要类似于
    if([super respondsToSelector:selector]){return[super…];}else{return[target…];}

    然后,最简单的方法是编写一个类,该类实现了NSCalendar的必要方法


    您也可以考虑调用<代码> [Super init ] < /> >;code>-[NSCalendar initWithCalendarIdentifier:可能会返回不同的

    self
    (例如
    [self release];return[[NSGregorianCalendar alloc]init]
    ),您不希望这样。您要传递什么日历标识符?也许它在抱怨它需要一个“具体的实现”,它知道您要传递的日历标识符。

    从NSCalendar直接继承很棘手,因为我认为它是一个类集群。我对这个概念有点模糊,所以我会给你一个苹果文档的链接,而不是让自己更傻


    NSTimer很酷,但在后台不起作用(我需要它作为后台)-抱歉,我似乎不清楚这一点。当应用程序在后台挂起时,计时器不会运行,这就是重复本地通知的全部目的。创建NSobject子类看起来是个好主意,谢谢!看起来它被用在了某种程度上,因为当我真的给它输入了NSObject衍生工具而不是NSCalendar时,出现了一个相当奇怪的模拟程序崩溃:)我过去给它传递了一个普通的公历,没什么特别的(而且我也不在乎用什么日历)