【问题标题】:Setting today's date to NSDate将今天的日期设置为 NSDate
【发布时间】:2012-11-12 22:17:55
【问题描述】:

我有一个如下的 NSDate 属性,我希望将其设置为今天的日期。

@property (nonatomic, copy, readwrite) NSDate *todayDate;

我尝试了以下方法,但出现错误:

NSDate *date = [[NSDate alloc] init];
self.todayDate = [date isToday];

我猜,isToday 只是检查日期是否是今天的日期,并没有设置日期。

我收到以下 2 个错误:

Implicit conversion of 'BOOL' (aka 'signed char') to 'NSDate *' is disallowed with ARC
Incompatible integer to pointer conversion assigning to 'NSDate *' from 'BOOL' (aka 'signed char'); 

如何在 Objective C 中将 NSDate 设置为今天的日期?

【问题讨论】:

  • NSDate* date = [NSDate date];
  • 请注意,您原来的 NSDate *date = [[NSDate alloc] init]; 也可以。
  • 在他的代码上下文中,我认为这仍然会导致错误?
  • 它(alloc/init 版本)不会修复不必要的isToday 调用,也不会修复可能的存储泄漏,但它会运行没有错误并产生正确的结果。跨度>

标签: objective-c ios nsdate


【解决方案1】:

NSDate你有报道吗:

NSDate *today = [NSDate date];

这是 Apple 框架中的常见模式:语义“工厂”类方法。此调用取代了您对 alloc 和 init 的调用,并且是处理公共对象的首选方式。在你自己的类中模拟它也是一个很好的模式:-)

应该阐明“为什么”的核心概念是不变性。许多对象(NSString、NSNumber 等)被认为(至少在实践中)是不可变的。这意味着它们只获得一次值:在初始化期间。这导致“其他”答案也是一种实例化时间技术:a custom initializer。

NSDate *today = [[NSDate alloc] initWithTimeIntervalSinceNow: 0];

【讨论】:

  • 好吧,如果你想这样做(第二版),为什么不一路走下去:NSDate *today = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:[NSDate timeIntervalSinceReferenceDate]];
  • 是的,扩展答案的真正目的是鼓励探索可用的内容:-)
【解决方案2】:

这会将您的财产设置为今天的日期。正如您所怀疑的,该错误是因为您正在为指针分配一个布尔值。

self.todayDate = [NSDate date];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多