比较两个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在控制台中,我在对象上盘旋以找到匹配的内容。 我只是保留了它,并在方法的最后发布了它。 谢谢你的所有答案;)