このような些細な質問をおかけして申し訳ありません。 Objective-Cの初心者で、&は、いくつかの可能な方法を試した後に、この作業をどうやって得るのか分かりません。& google'd around。助けてください! 私の質問は簡単です。メソッド内で、今メソッド間でNSDate値にアクセスできない
NSDate *fromDate;
、として日付ピッカーから日付にこの値を設定しています:私はとクラスのいずれかの方法の外で宣言されたクラスレベルNSDateオブジェクトを、持っている
fromDate = [datePicker date];
すぐ上の割り当ての後、私はその値をログに出力します&正常に動作します。
NSLog(@"From Date: %@", fromDate);
ここで、別の/異なるメソッドでNSDateの値を使用すると、値はなくなりました。同じクラスのメソッド間で永続化されないのはなぜですか?値がメソッド間でアクセスできるようにするにはどうすればよいですか?
ご返信ありがとうございます。
こんにちはレミー、
私はクラスレベルの変数を持っていなかったのObjective-Cを知りませんでした!それを指摘してくれてありがとう!
はい、私はARCを行うように(Xcodeで)プロジェクトを設定しました(そう、私は注意が必要です)。
ここではコードです: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メソッドで印刷すると、値には現在の日付/時刻が表示されます(ユーザーが選択したものではありません)。
あなたはARCを使用していますか? ARCのプロパティはstrong/weakを使用し、retainキーワードは使用しません! – Andy
@Jeanあなたはこの問題の解決策を見つけましたか?私はアプリに取り組んでいると私はまったく同じ問題に遭遇した。 – yiwei
@Jean心配しないで、私は問題を解決しました。私はクラスをエンコードするために 'NSCoding'を使用していました。私は' NSDate'プロパティをエンコードしてデコードする行を除外しました。 – yiwei