比较两个NSDate失败

我尝试比较两个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`' 

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

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

比较2个NSDate日期:

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

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

也许你应该在你的– (void)plusOneDate方法中写下你已经拥有的东西

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

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

首先,我强烈建议您查看“ 内存管理编程指南”以更好地了解内存管理。

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

我希望它对你有所帮助

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