2012-04-19 6 views
1

このような些細な質問をおかけして申し訳ありません。 Objective-Cの初心者で、&は、いくつかの可能な方法を試した後に、この作業をどうやって得るのか分かりません。& google'd around。助けてください! 私の質問は簡単です。メソッド内で、今メソッド間でNSDate値にアクセスできない

NSDate *fromDate; 

、として日付ピッカーから日付にこの値を設定しています:私はとクラスのいずれかの方法の外で宣言されたクラスレベルNSDateオブジェクトを、持っている

fromDate = [datePicker date]; 

すぐ上の割り当ての後、私はその値をログに出力します&正常に動作します。

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

ここで、別の/異なるメソッドでNSDateの値を使用すると、値はなくなりました。同じクラスのメソッド間で永続化されないのはなぜですか?値がメソッド間でアクセスできるようにするにはどうすればよいですか?


ご返信ありがとうございます。

こんにちはレミー、

  1. 私はクラスレベルの変数を持っていなかったのObjective-Cを知りませんでした!それを指摘してくれてありがとう!

  2. はい、私はARCを行うように(Xcodeで)プロジェクトを設定しました(そう、私は注意が必要です)。

  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のプロパティはstrong/weakを使用し、retainキーワードは使用しません! – Andy

+0

@Jeanあなたはこの問題の解決策を見つけましたか?私はアプリに取り組んでいると私はまったく同じ問題に遭遇した。 – yiwei

+0

@Jean心配しないで、私は問題を解決しました。私はクラスをエンコードするために 'NSCoding'を使用していました。私は' NSDate'プロパティをエンコードしてデコードする行を除外しました。 – yiwei

答えて

0

UIDatePickerのdateプロパティは、そのクラスによって保持され、日付ピッカー自体が有効で有効である(リリースされていない)限りアクセス可能です。この日付の値は変数に格納していますが、それを自分自身で保持しているわけではありません。したがって、日付ピッカーが有効範囲外になると値が失われます。迅速な修正として、これを代わりに実行してください。

fromDate = [[datePicker date] retain]; 

これは最良のアプローチではありません。この情報を使用しているクラスのプロパティを日付にする必要があります。

0

fromDate変数をクラススコープeに配置してみてください。g:

@implementation ViewController 
{ 
    NSDate *fromDate; 
} 
関連する問題