【问题标题】:compare two NSDate fails比较两个 NSDate 失败
【发布时间】:2011-07-09 11:08:24
【问题描述】:

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

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

没有代码它工作正常。

它只是崩溃了,EXE_BAD_ACCESS 在 main 方法的这一行。

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

然后打印

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

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

【问题讨论】:

  • 在到处搜索如何比较一个日期是否早于其他日期之后,很高兴我遇到了你的问题来学习正确的代码 if([firstDate compare:secondDate] == NSOrderedAscending) { / /secondDate 在 firstDate 之后 } else { //firstDate 在 secondDate 之后 }

标签: iphone objective-c xcode ios


【解决方案1】:

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

【讨论】:

  • 它在 viewDidLoad 中初始化。 [NSD 日期];
  • 你去。 [NSDate date] 产生一个自动释放的对象——一旦 viewDidLoad 返回,它就会被释放。要使其在事件之间持续存在,请使用[[NSDate alloc] init][retain]
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      实际上问题出在今天。 内存地址在控制台中,我将鼠标悬停在对象上以找到匹配的对象。 我只是保留它,并在方法结束时释放它。 感谢您的所有回答;)

      【讨论】:

        【解决方案5】:

        比较 2 个NSDate 日期:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-11
          • 1970-01-01
          • 1970-01-01
          • 2012-05-07
          • 1970-01-01
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          相关资源
          最近更新 更多