1

このような些細な質問をして申し訳ありません。Objective-Cの初心者であり、いくつかの可能な方法を試してグーグルで検索した後、これを機能させる方法がわかりません。助けてください!私の質問は簡単です。クラスレベルの 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メソッドで出力すると、値は現在の日付/時刻を示します (ユーザーが選択したものではありません)。

4

2 に答える 2

0

fromDate 変数をクラススコープの下に置いてみてください。

@implementation ViewController
{
    NSDate *fromDate;
}
于 2013-01-25T00:34:57.020 に答える
0

の日付プロパティはUIDatePickerそのクラスによって保持され、日付ピッカー自体がスコープ内にあり、有効である (リリースされていない) 限りアクセスできます。この日付値を変数に格納していますが、自分で保持していないため、日付ピッカーが範囲外になると値が失われます。簡単な修正として、代わりにこれを行います。

fromDate = [[datePicker date] retain];

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

于 2012-04-19T17:51:23.473 に答える