0

UIPickerView のデリゲートと dataSource を別のファイルに作成しようとしています。ViewController には次のものがあります。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIPickerView *myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 200, 320, 200)];

    MonthPicker *monthPicker = [[MonthPicker alloc] init];
    myPickerView.delegate = monthPicker;
    myPickerView.dataSource = monthPicker;
    myPickerView.showsSelectionIndicator = YES;
    [self.view addSubview:myPickerView];
}

MonthPicker.h

#import <UIKit/UIKit.h>

@interface MonthPicker : NSObject<UIPickerViewDelegate,UIPickerViewDataSource>

@end

MonthPicker.m

#import "MonthPicker.h"

@implementation MonthPicker


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return 7;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return @"yyy";
}

@end

現時点では、デリゲートを機能させるためにプレースホルダー値のみを使用しています。Everyting は正常にコンパイルされますが、アプリを実行してピッカーを含むビューに移動すると、コンソールにエラー メッセージが表示されずにクラッシュします。

Thread 1:EXC_BAD_ACCESS (code=2,address=0x0) という唯一のメッセージが表示されますが、これはまったく役に立ちません。

また、デリゲートのdeallocメソッドを NSLog でオーバーライドしようとしましたが、クラッシュが発生する前に割り当てが解除されたように見えますが、これは非常に奇妙です。

私は何が欠けていますか?

ありがとうございました。

4

1 に答える 1

3

問題は、viewDidLoad メソッドの最後に monthPicker オブジェクトの割り当てが解除されることです。

代わりに monthPicker をプロパティにしてみてください。それが機能するかどうかを確認してください

于 2014-07-24T22:00:12.787 に答える