跨方法无法访问NSDate值

时间:2012-04-19 17:40:51

标签: nsdate

很抱歉提出这样一个微不足道的问题。是Objective-C的新手,&在尝试了几种可能的方法之后,根本无法看到如何使其工作。谷歌四处寻找它。请帮忙! 我的问题很简单。我有一个类级NSDate对象,它在类中的任何方法之外声明为:

NSDate *fromDate;

现在,在方法中,我将此值设置为DatePicker中的日期:

fromDate = [datePicker date];

在完成上述任务后不久,我将其值打印到日志&它工作正常。

NSLog(@"From Date: %@", fromDate);

现在,当我在另一个/不同的方法中使用NSDate的值时,值已经消失了!为什么它不会在同一个类本身的方法中持久存在?对于可以跨方法访问的值,我能做些什么?


感谢您的回复。

嗨,雷米,

  1. 我不知道Objective-C没有类级变量!谢谢你指出来了!

  2. 是的,我已将项目(在Xcode中)设置为ARC(因此,我认为应该注意)。

  3. 以下是代码:

  4. 在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 方法中打印时,该值显示当前日期/时间(不是用户选择的日期/时间)。

2 个答案:

答案 0 :(得分:0)

UIDatePicker的日期属性由该类保留,只要日期选择器本身在范围内且有效(未发布),就可以访问该属性。您将此日期值存储在变量中,但不会自行保留,因此当日期选择器超出范围时,您将丢失该值。作为快速解决方案,请改为执行此操作;

fromDate = [[datePicker date] retain];

现在,这不是最好的方法,你真的应该把日期作为任何类的属性使用这些信息。

答案 1 :(得分:0)

尝试类范围下的from Date变量,例如:

@implementation ViewController
{
    NSDate *fromDate;
}