Iphone 比较两个NSDate失败

Iphone 比较两个NSDate失败,iphone,objective-c,xcode,ios,Iphone,Objective C,Xcode,Ios,我尝试比较两个NSDate对象。 但它总是失败,我看不出有什么不对 -(IBAction)nextAction { NSDate *today = [NSDate date]; if([appStateDate compare:today] == NSOrderedAscending) { dispatch_async(calcQueue, ^{ [self plusOneDate]; }); } } 如果没有代码,它可以正常工作 它只是崩溃了,并且

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

  -(IBAction)nextAction
{
    NSDate *today = [NSDate date];
    if([appStateDate compare:today] == NSOrderedAscending) {
        dispatch_async(calcQueue, ^{ [self plusOneDate]; });
    }
}
如果没有代码,它可以正常工作

它只是崩溃了,并且在main方法中对这一行进行了EXE\u BAD\u访问

 int retVal = UIApplicationMain(argc, argv, nil, nil);
和印刷品

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

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

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

从主题中,我想说像@Seva Alekseyev,在-(iAction)下一个主题中,appStateDate看起来不像是声明/初始化的

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

只是为了检查,您还可以记录变量的类型和appStateDate的值,以查看它是否是应该的


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

首先,我强烈建议你看看,以便更好地了解内存管理

在我看来,
appStateDate
不再是
NSDate
类的实例,因为您分配它的方式不同。当您使用
[NSDate date]
时,实际上是在说
[[[NSDate alloc]init]autorelease]
,这样对象在您实际使用它之前就被释放了。通常,您想要对类实例对象执行的操作是
alloc
init
它们,然后在
dealloc
方法中
release
它们


我希望它能帮助你

事实上,问题出在今天。 内存地址在控制台中,我将鼠标悬停在对象上以查找匹配的内存地址。 我只是保留了它,并在方法结束时发布了它。
谢谢你的回答;)

比较2
NSDate
日期:

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

它在viewDidLoad中初始化。[日期];好了<代码>[NSDate date]生成一个自动释放的对象-一旦viewDidLoad返回,它就被释放。若要使其在事件之间保持不变,请使用
[[NSDate alloc]init]
[retain]
将其保留。在到处搜索如何比较某个日期是否早于其他日期后,我非常高兴地发现了您的问题,以了解正确的代码,如果([firstDate compare:secondDate]==sensorderedascing){//secondDate在firstDate之后}其他{//firstDate在secondDate之后}