0

以下は、日付ピッカーを作成する標準的な例です

- (void)viewDidLoad {

    CGRect pickerFrame = CGRectMake(0,250,100,100);

    UIDatePicker *myPicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
    [myPicker addTarget:self action:@selector(pickerChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:myPicker];
    [myPicker release]; 
}

- (void)pickerChanged:(id)sender
{
    NSLog(@"value: %@",[sender date]);
}

これはすべて順調です。私はIBで要素を作成することに少し慣れているので、プログラムでオブジェクトを作成するとき、データにアクセスする方法がわかりません。

つまり、myPicker をクラス プロパティに割り当てて、_myPicker としてアクセスする必要がありますか?

または、別のメソッドを呼び出さずに pickerChanged メソッド内の日付にアクセスしたいとしましょう。NSDate プロパティを割り当て、ピッカーが変更されるたびに再割り当てする必要がありますか?

そのようにしようとしたときに、いくつかのメモリの問題に遭遇しました。_theDate を取得する別のメソッドがありましたが、pickerChanged が変更しているのと同時にアクセスしようとしたのでしょうか?

とにかく、私が得ているのは、「アクションシートやピッカーなどをプログラムで作成するときの適切なワークフローは何ですか」です。これらが変更された場合、クラスの残りの部分がアクセスできるように、結果のデータをどのように保存する必要がありますか?

おまけの質問:

これに違いはありますか?

for(UILabel *myLabel in view.subviews){
    NSLog(myLabel.text);
}

この?ビューに特定の種類のオブジェクトしか含まれていないことがわかっている場合、常にクラスをチェックする必要がありますか?

for((id) myLabel in view.subviews){
    if([myLabel isKindOfClass:[UILabel class]){
        UILabel *theLabel = myLabel;
        NSLog(myLabel.text);
    }
}
4

3 に答える 3

1

通常、複数回アクセスする必要がある場合は、プロパティを定義するだけです。これは、.m ファイルのインターフェイスで行うことができます。

@interface MyObject()

@property (weak, nonatomic) UIDatePicker *myPicker;

@end

その後、_myPicker または self.myPicker のいずれかでアクセスできるようになります。

いつでも設定された日付にアクセスできるため、クラスに別の NSDate プロパティは必要ありません。

_myPicker.date

最後の質問: 2 つのうち後者は、追加のサニティ チェックにすぎません。独自のコードを作成していて、追加しているサブビューを把握している必要がある場合は、何か問題が発生した場合や、存在しないセレクターにアクセスしようとした場合に備えて、サブビューのタイプを再確認することをお勧めします。 . ただし、これはより大きなプログラミングの問題であり、必ずしも目的の c または iOS 固有ではありません。

于 2013-07-24T16:18:22.643 に答える
0

UIControlEventValueChanged文書化されたアプローチは、例のようにイベント を傍受することです。

次に、通常は[sender date]値をメソッドのプロパティにコピーしますpickerChanged:

ユーザーが保存ボタンを押した場合、ピッカーを含むビューを表示したオブジェクトは、プロパティを介して選択された日付を取得できる必要があります。

isKindOfClass: を使用することはお勧めできません。どのクラスを扱っているかを常に把握できるように、コードを構成する必要があります。

また、本当に ARC に切り替える必要があるため、通話について心配する必要はありません。release

于 2013-07-24T16:19:20.550 に答える