【问题标题】:How to pass NSDate as a pointer?如何将 NSDate 作为指针传递?
【发布时间】:2013-05-27 15:33:15
【问题描述】:

在我的应用程序中,我有情节提要,以及许多使用日期选择器查看控制器的 segues。

如何将NSDate 作为指针传递,以便在选择后将值保留在此NSDateobject 中?

现在,在我的AppDelegate 属性中,我有很多 NSDate。在prepareForSegue 中,我通过正确的NSDate 来查看控制器作为保留属性:

@property (retain, nonatomic) NSDate * date;

选择后,我给这个属性赋值:

- (IBAction)dateChanged:(id)sender{
    if (date) {
        date = datePicker.date;
    }
}

但它不起作用。

我哪里错了?

【问题讨论】:

    标签: ios objective-c cocoa nsdate


    【解决方案1】:

    您所描述的东西在 Objective-C 用语中称为传递引用。由于对象类型的变量已经是指针,因此您需要一个指针指针类型。要实现这一点,您需要将NSDate **dateReference 传递给您的日期选择器控制器。选择日期后,控制器将设置*dateReference = pickedDate

    但这是回传所选日期的一种不常见且脆弱的方式。更好的方法是在日期选择器控制器上使用一个委托,并使用支持日期选择的协议。

    或者,在这个简单的情况下,使用基于块的 API 更好:日期选择器控制器获取一个completionBlock,客户端控制器将在呈现日期选择器之前设置它。

    【讨论】:

      【解决方案2】:

      而不是:

      date = datePicker.date
      

      使用:

      self.date = datePicker.date
      

      同样,参考 self.date。更多信息,请参阅Setting an Objective-C class property without using a self reference

      【讨论】:

      • 这仍然只会在日期选择器控制器中设置 ivar,而不是在客户端控制器中。
      • 啊,好的。我当时误解了这个问题。
      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 2012-01-24
      • 1970-01-01
      • 2013-09-02
      • 2016-07-17
      相关资源
      最近更新 更多