很抱歉提出这样一个微不足道的问题。是Objective-C的新手,&在尝试了几种可能的方法之后,根本无法看到如何使其工作。谷歌四处寻找它。请帮忙! 我的问题很简单。我有一个类级NSDate对象,它在类中的任何方法之外声明为:
NSDate *fromDate;
现在,在方法中,我将此值设置为DatePicker中的日期:
fromDate = [datePicker date];
在完成上述任务后不久,我将其值打印到日志&它工作正常。
NSLog(@"From Date: %@", fromDate);
现在,当我在另一个/不同的方法中使用NSDate的值时,值已经消失了!为什么它不会在同一个类本身的方法中持久存在?对于可以跨方法访问的值,我能做些什么?
感谢您的回复。
嗨,雷米,
我不知道Objective-C没有类级变量!谢谢你指出来了!
是的,我已将项目(在Xcode中)设置为ARC(因此,我认为应该注意)。
以下是代码:
在ViewController.h中
....
....
@property (nonatomic, retain) NSDate *historyFromDate;
@property (nonatomic, retain) NSDate *historyToDate;
....
....
-(IBAction) fromDateChosen: (id)sender;
-(void) fetchTheHistory;
在ViewController.m中
...
...
@synthesize historyFromDate;
@synthesize historyToDate;
....
....
-(IBAction) fromDateChosen: (id)sender {
NSString *buttonTitle = @"I've chosen the 'FROM' date";
if ([[buttonDateChosen currentTitle] isEqualToString:buttonTitle]) {
NSLog(@"User has chosen the 'From' date");
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
// Get the chosen date value
NSDate *fromDate = [datePicker date];
historyFromDate = fromDate;
// Set the 'to' date label to reflect the user's choice
labelFromDate.text = [dateFormatter stringFromDate:historyFromDate];
NSLog(@"'From' Date Chosen:%@", historyFromDate);
//[dateFormatter stringFromDate:[datePicker date]]);
[self fetchTheMoodHistory];
}
}
...
...
...
-(void) fetchTheHistory {
NSLog(@"Calling fetchTheHistory for the period from %@", historyFromDate);
...
...
}
...
...
在用户从UI中选择日期选择器对象的日期后,将调用fromDateChosen 。 在方法' fromDateChosen '中,当我打印 historyFromDate 时,值是正确的。 但是,当我在 fetchTheHistory 方法中打印时,该值显示当前日期/时间(不是用户选择的日期/时间)。
答案 0 :(得分:0)
UIDatePicker
的日期属性由该类保留,只要日期选择器本身在范围内且有效(未发布),就可以访问该属性。您将此日期值存储在变量中,但不会自行保留,因此当日期选择器超出范围时,您将丢失该值。作为快速解决方案,请改为执行此操作;
fromDate = [[datePicker date] retain];
现在,这不是最好的方法,你真的应该把日期作为任何类的属性使用这些信息。
答案 1 :(得分:0)
尝试类范围下的from Date变量,例如:
@implementation ViewController
{
NSDate *fromDate;
}