如何将NSDate作为指针传递?

时间:2013-05-27 15:33:15

标签: ios objective-c cocoa nsdate

在我的应用程序中,我有故事板,还有很多用于查看带日期选择器的控制器。

如何在选择之后传递NSDate作为指针,以保持此NSDate对象的值?

现在,在我的AppDelegate属性中,我有很多NSDate。在prepareForSegue中,我将右NSDate传递给控制器​​作为保留属性:

@property (retain, nonatomic) NSDate * date;

选择后,我为此属性赋值:

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

但它没有用。

我哪里错了?

2 个答案:

答案 0 :(得分:3)

您所描述的内容在Objective-C用语中称为pass-by-reference。由于对象类型的变量已经是指针,因此需要指针指针类型。要实现此功能,您需要将NSDate **dateReference传递给日期选择控制器。选择日期后,控制器将设置*dateReference = pickedDate

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

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

答案 1 :(得分:1)

而不是:

date = datePicker.date

使用:

self.date = datePicker.date

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