5

UIDatePicker で非常に奇妙な動作が発生しています。IBOutlet UIDatePicker *datePicker; として .h ファイルで宣言された日付ピッカーを含むビューがあります。非アトミックおよび保持プロパティを使用します。datePicker は IB ファイルで適切にリンクされています。

コードでは、次のコードを使用して UICONtrolEventValueChanged を呼び出す最小、最大、初期の日付とアクションを設定しています

If (!currentDate) {
    initialDate = [NSDate date];
} else {
    initialDate = currentdate;
}

[datePicker setMinimumDate:[NSDate date]];
[datePicker setMaximumDate:[[NSDate date] addTimeInterval:5 * 365.25 * 24 * 60 * 60]]; // to get upto 5 years 
[datePicker setDate:initialDate animated:YES];

[datePicker addTarget:self action:@selector(getDatePickerValue:) forControlEvents:UIControlEventValueChanged];

getDatePickerValue では、datePicker.date を使用して新しい日付を取得します。

ビューが (完了ボタンを使用して) 閉じられると、datePicker.date を使用して日付の現在の値を取得します。

ビューが「currentDate」なしで呼び出された場合、ピッカーは「今日の日付」を返します。これは、pickerView が「初めて」呼び出されたときに発生します。「現在の日付」を指定せずにビューを呼び出すたびに、今日とは異なる日付が返されます。そう、

最初に今日の日付を取得すると、2010 年 6 月 9 日と
します。2 回目は datePicker.date が 2010 年 6 月 10 日を返します
。常にインクリメンタルであるとは限りませんが、ほとんどはインクリメンタルです。

NSLogs を配置し、最初の日付が正しく設定されていることを確認しました。

問題はデバイス (OS 3.0) のみにあり、シミュレーターでは再現されません。

私が間違ったことをしたことを見つけることができません。他の誰かが同様の問題に遭遇し、これを解決するのを手伝ってくれることを願っています.

4

2 に答える 2

5

問題は最終的に解決されます。問題を解決した理由をリストします。他の誰かが同様の問題に遭遇した場合は、これらの手順を試すことができます

私は2つのことをしました
1. datePickerのロケールとカレンダーを設定します -

NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setLocale:locale];

self.datePicker.locale = locale; 
self.datePicker.calendar = [locale objectForKey:NSLocaleCalendar];

しかし、これだけでは問題は解決しませんでした。
2. datePicker への各参照の前に「self」を置きました。つまり、すべての datePicker を self.datePicker に置き換えました。これにより、コンパイラのセッターとゲッターが強制的に呼び出されたに違いありません。

「self」を使用しないとなぜ奇妙な動作をするのか、完全には理解できません。しかし、はい、変数に正しいセッターを使用することにもっと注意を払います。

私の問題を見てくれてありがとう。

于 2010-06-09T22:49:09.690 に答える
3
IBOUTLET UIDatePicker *datePicker;
IBOUTLET UILabel *label;
}
-(void)click:(id)sender;


- (void)viewDidLoad {

    [super viewDidLoad];
    NSDate *dateFromPicker = [[NSDate alloc]init];
    [date setDate:dat animated:YES];
}
-(void)click:(id)sender {

    NSDate *selectDate = [datePicker date];
    NSString *dateString = [NSString stringWithFormat:@"%@",selectDate];

    [label setText:dateString];
}

これはうまくいきます、

于 2010-12-20T15:12:25.707 に答える