-4

datePicker を作成しました。datePicker を再度使用するときに、最後に使用した日付を表示したいと考えています。datePicker をユーザーのデフォルトに保存し、保存した日付に日付を設定しようとしました。これが私のコードです:

datepicker = [[UIDatePicker alloc] init];
    datepicker.datePickerMode = UIDatePickerModeDate;
    [datepicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
    datepicker.timeZone = [NSTimeZone defaultTimeZone];
    datepicker.minuteInterval = 5;
    datepicker.datePickerMode = UIDatePickerModeTime;

    [datepicker setDate:selectedDate];

    [textfield setInputView:datepicker];

これは値が変更されました

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSDate *selectedDate = [datepicker date];

    [defaults setObject:selectedDate forKey:@"selectedDate"];

しかし、私はエラーが発生します

 Use of undeclared identifier 'selectedDate'

ヘッダーファイルに何かを入れる必要がありますか?


編集

これをヘッダーファイルに入れてみましたが、ボタンを押してdatePickerでView Controllerにアクセスすると、アプリがクラッシュします。キャッチされていない例外が原因でクラッシュします。

 NSDate *selectedDate;

編集 2

このコードを試してみましたが、エラーが発生しました

 NSUserDefaults *defaul = [NSUserDefaults standardUserDefaults];

        if([[NSUserDefaults standardUserDefaults] objectForKey:@"selectedDate"] != nil) {

        NSDate *selectedDate = [defaul dataForKey:@"selectedDate"];

そしてピッカーでDidChange

NSUserDefaults *defaul = [NSUserDefaults standardUserDefaults];

    NSDate *selectedDates = [datepicker date];

    [defaul setObject:selectedDates forKey:@"selectedDate"];

エラーはIncompatible pointer types initializing 'NSDate *__strong' with an expression of type 'NSData *'


編集 3

これはdateForKeyと言っていると思いました NSDate *selectedDate = [defaul dataForKey:@"selectedDate"];

だから私はそれを

NSDate *selectedDate = [defaul objectForKey:@"selectedDate"];

そして今、ピッカーは私が望むように機能します。

4

3 に答える 3

1

おもう:

あなたはARCを使用しておらず、保持していませんselectedDate

あなたはできる:

.h

@property(retain,nonatomic) NSDate selectedDate;

.m

@synthesize selectedDate

- (void)dealloc
{
     self.selectedDate = nil;
     [super dealloc];
}

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

//NSDate *selectedDate = [datepicker date];
self.selectedDate = [datepicker date];

[defaults setObject:selectedDate forKey:@"selectedDate"];
于 2013-08-06T02:33:02.520 に答える
1

最初のコード ブロックには、次の行がありました

[datepicker setDate:selectedDate];

しかし、その時点でselectedDateは初期化されてvalueDidChangeいないため (呼び出されなかったため)、コンパイラが不平を言っているのはそのためです。

それを修正するには、呼び出す前にselectedDate日付を設定する必要があります。[datepicker setDate:]

于 2013-08-06T02:41:11.773 に答える
0

インスタンス変数 selectedDate の初期化を忘れると、デフォルトでは nil になり、クラッシュの原因になります。DatePicker の日付を設定する前に、nil かどうかを確認してください。

編集済み:使用する前に nil であることを確認してください。何をすべきかはすでに説明しました。

コード:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
selectedDate = [defaults objectForKey:@"selectedDate"]; 
if(selectedDate){
    [datepicker setDate:selectedDate];
}
于 2013-08-06T02:17:23.973 に答える