我尝试比较两个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`'
我不擅长使用调试器,所以如果你知道任何好的教程或指南我想知道它们;)抱歉我的英语
答案 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]
,以便在您实际使用它之前释放该对象。通常,您要对类实例对象执行的操作是alloc
和init
,然后使用release
方法dealloc
。
我希望它可以帮到你
答案 4 :(得分:0)
实际上今天是问题所在。 内存addr在控制台中,我在对象上盘旋以找到匹配的对象。 我只是保留了它,并在方法的最后发布了它。 谢谢你的所有答案;)