比较两个NSDate失败

时间:2011-03-05 16:06:19

标签: iphone objective-c xcode ios

我尝试比较两个NSDate对象。 但它总是失败,我看不出有什么问题。

  -(IBAction)nextAction
{
    NSDate *today = [NSDate date];
    if([appStateDate compare:today] == NSOrderedAscending) {
        dispatch_async(calcQueue, ^{ [self plusOneDate]; });
    }
}

没有代码,它可以正常工作。

它只是在主方法中崩溃了,并且在这一行上有EXE_BAD_ACCESS。

 int retVal = UIApplicationMain(argc, argv, nil, nil);

并打印

'+[ compare:]: unrecognized selector sent to class 0x634d7e0`'

我不擅长使用调试器,所以如果你知道任何好的教程或指南我想知道它们;)抱歉我的英语

5 个答案:

答案 0 :(得分:3)

看起来appStateDate未初始化,或者包含除NSDate之外的其他内容。你在哪里初始化它?

答案 1 :(得分:2)

比较2 NSDate个日期:

NSDate *date1; NSDate *date2;
if ([date1 timeIntervalSinceDate:date2] > 0) 
    // date1 is newer.

答案 2 :(得分:0)

来自this主题,我想说@ Seva-Alekseyev,在 - (IBAction)nextAction 中,appStateDate看起来不像是声明/初始化了。

也许您应该在 - (void)plusOneDate 方法中编写已有的内容。

只是要检查一下,你也可以NSLog变量的类型和 appStateDate 的值来看看它是否应该是它。

我也是初学者,我不确定,但只是想帮助:)

答案 3 :(得分:0)

首先,我强烈建议您查看Memory Management Programming Guide以更好地了解内存管理。

在我看来,由于您分配它的方式,appStateDate不再是NSDate类的实例。当您使用[NSDate date]时,您实际上是在说[[[NSDate alloc]init]autorelease],以便在您实际使用它之前释放该对象。通常,您要对类实例对象执行的操作是allocinit,然后使用release方法dealloc

我希望它可以帮到你

答案 4 :(得分:0)

实际上今天是问题所在。 内存addr在控制台中,我在对象上盘旋以找到匹配的对象。 我只是保留了它,并在方法的最后发布了它。 谢谢你的所有答案;)