1

以前のViewControllerのTableViewで個々のオブジェクト(NSString、NSNumber、NSDate)を編集するために再利用しているViewControllerがあります。私はこれをAppleのSQLiteBooksサンプルプロジェクトのEditingViewControllerに大まかに基づいています。datePickerはnibファイルでインスタンス化されます。

ここでの問題は、私が最初に設定した日付でうまく機能し、ダンディであるということです。ただし、2日目に再度呼び出されると、ロード時にタンブラー(?)で編集している次の日付が正しく表示されますが、強調表示された(青)月、日、年は、ピッカーが最初だったときのものです。最初の編集の前に表示されます。これらの強調表示された値を2番目の日付オブジェクトの初期値に設定したり、UIdatePickerインスタンス全体をリセットしたりするにはどうすればよいですか。

ココアの周りに頭を包むのに苦労している2番目の関連する質問(ボーナスポイント;-):なぜ、SQLiteBooksの例では、EditingVewController.hで宣言されたdatePickerの@propertyまたは@synthesizeステートメントがないのですか?それとも私は明白なことを見落としましたか?ありがとう!

編集:UIDatePickersを使用して他のアプリで実験した後、何らかの理由でUIDatePickerを日付モードで使用すると、たとえば1776からの日付を編集している場合でも、現在の月、日、年が強調表示されるようです。この動作をどのように変えることができますかオフ?

4

2 に答える 2

1

最初のピッカーからの日付を格納します (例: storedDate)。次に、date プロパティを使用して UIDatePicker に表示される日付を設定します。UIDatePicker の名前が picker であると仮定すると、

 picker.date = storedDate; // picker's date is initialised to today's date/time

ピッカーを日付に合わせてアニメーション化する場合は、このメソッドを使用することもできます。

[picker setDate:storedDate animated:YES];

プロパティに関しては、公開データでのみ使用する必要があるというのは正しくありません。プロパティは、インスタンス変数を通じて直接アクセスされるのではなく、メソッドを通じてアクセスされるデータを参照します。プロパティ宣言 (具体的には @synthesize) は、これらの宣言を使用して、クラスのインターフェイスを満たすために必要に応じてアクセサー メソッドを自動的に生成するようにコンパイラに指示します。

Objective-C のドット構文は、コンパイラによってアクセサ メソッドの呼び出しに変換されます。そう...

foo.bar = @"hello";

コンパイラによって変換されます...

[foo setBar:@"hello"];

同じく生成された setBar は、その @property 宣言に従って、必要なすべてのことを行います。したがって、保持として宣言されている場合、セッターに正しく保持されるため、心配する必要はありません。

したがって、結論として、あなたが言及した Apple コードは正しく動作する可能性がありますが (私は見ていません)、プロパティを使用する方が防御的なコーディングになります。

于 2009-02-20T07:51:07.083 に答える
0

ココアの周りに頭を包むのに苦労している2番目の関連する質問(ボーナスポイント;-):なぜ、SQLiteBooksの例では、EditingVewController.hで宣言されたdatePickerの@propertyまたは@synthesizeステートメントがないのですか?それとも私は明白なことを見落としましたか?ありがとう!

プロパティを公開する場合にのみ、@propertyを宣言する必要があります。プライベートインスタンス変数の場合は、省略します。

また、@ synthesizeは、コンパイラに@propertyのアクセサメソッドを作成させるだけなので、@ propertyでない場合は、@ synthesize(または@dynamic)を使用しません。

于 2009-02-20T03:57:11.483 に答える