【问题标题】:Compare dates using cocoa objective c使用可可目标 c 比较日期
【发布时间】:2009-12-03 06:05:45
【问题描述】:

是否有必要我必须编写以下方法才能在 if....部分中调用它。

-(NSComparisonResult) compare:(NSDate *)expDate{}

如果是,那么我必须如何以及在哪里编写此方法,以便以下代码可以正常工作?

if (licenseDictionary == nil)
    return @"Not Registered";
else if([today compare:expDate] == NSOrderedAscending)
{   
    [gotoButton setEnabled:YES];
    return [licenseDictionary objectForKey:@"Name"];
}
else
    return @"License Expired";

【问题讨论】:

  • 您是在比较自定义对象还是NSDates?如果是后者,则必须在类实现中实现该方法。

标签: objective-c


【解决方案1】:

还有earlierDate:laterDate:isEqualToDate:

您可以在 here 找到有关它们的文档。

比如:

if ([today laterDate:expDate] == expDate)

这是在浏览器中干编码的,但我认为这就是你想要的。

编辑:我在上面修正了一个错字,你不需要使用compare:laterDate:earlierDate: 处理比较并分别返回较晚或较早的对象。

所以上面的代码说明了哪个更晚,今天或 expDate,如果 expDate 是后者(我认为指针比较应该在这里工作,但如果不尝试 isEqualToDate: 代替)那么它还没有过期并且他们的许可证应该是有效的。

我希望这有助于更有意义。

【讨论】:

  • 感谢 Bryan,但我已经完成了这个。还有其他方式吗?
  • 您反对使用 NSDate 的内置方法进行测试的具体原因是什么?
  • 实际上,我不知道如何提供接收者日期来比较方法我有一个 expDate 变量,我从 plist 文件中获取日期。我的问题是有必要编写一个 (NSComparisonResult) compare:(NSDate *)expDate 方法。如何以及在哪里?
  • @Shakti,我已经更新了一些描述以提供更多解释。我有 99% 的把握,上面的 if 语句,或者它的一些细微变化,是你需要的。
  • @Shakti,正如我回答你的另一个问题stackoverflow.com/questions/1811779/comparing-dates-in-cocoa。如果您只是将日期作为 NSDate 对象存储在 plist 中,您的问题就会消失。
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多