2012-04-19 107 views
1

很抱歉問這樣一個微不足道的問題。我是新手的Objective-C,&根本無法看到如何得到這個工作,嘗試過它周圍google'd幾種可能的方式&後。請幫忙! 我的問題很簡單。我有一個類級別的NSDate對象,它宣佈任何方法之外的類爲:現在跨方法無法訪問的NSDate值

NSDate *fromDate; 

,在方法中,我從一個datepicker設置該值的日期:

fromDate = [datePicker date]; 

在上述分配後不久,我將它的值打印到日誌&中,它工作正常。

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

現在,當我在另一個/不同的方法中使用NSDate的值時,該值消失了!爲什麼它不會在同一類本身的方法中持續存在?我可以通過什麼方法來實現跨方法訪問的價值?


感謝您的回覆。

嗨雷米,

  1. 我不知道Objective-C的沒有類級變量!感謝您指出!

  2. 是的,我給自己定的項目(在Xcode)做ARC(所以,我認爲,應該照顧)。

  3. 下面是代碼:

在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); 
... 
... 
} 

... 
... 

fromDateChosen被稱爲用戶選擇一個日期後在UI中形成一個Date Picker對象。 在方法「fromDateChosen」,當我打印historyFromDate,該值是正確的。 但是,當我打印在fetchTheHistory方法,該值顯示當前的日期/時間(而不是一個用戶選擇)。

+0

你確定你正在使用ARC嗎? ARC的財產使用強/弱,而不是保留關鍵字! – Andy 2013-01-25 00:38:56

+0

@Jean你有沒有想過解決這個問題?我正在研究一個應用程序,並且遇到了完全相同的問題。 – yiwei 2014-01-12 03:40:04

+0

@Jean沒關係,我解決了我的問題。我使用'NSCoding'來編碼我的類,並且省去了行來編碼和解碼我的'NSDate'屬性。 – yiwei 2014-01-12 04:29:23

回答

0

UIDatePicker日期屬性由該類保留,並將於只要日期選擇器本身的範圍和有效的訪問(尚未公佈)。您將此日期值存儲在一個變量中,但不是自己保留它,所以當日期選擇器超出範圍時,將失去該值。作爲一個快速修復,請改爲這樣做;

fromDate = [[datePicker date] retain]; 

現在,這不是最好的方法,你真的應該使日期成爲任何類的使用此信息的屬性。

0

儘量把課下範圍,E沒有fromdate變量。g:

@implementation ViewController 
{ 
    NSDate *fromDate; 
}