为UIPickerView创建委托和dataSource

时间:2014-07-24 21:55:09

标签: objective-c delegates uipickerview uipickerviewdelegate

我正在尝试在单独的文件中为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编译好,但是当我运行应用程序并转到其中包含选择器的视图时,它会在控制台中崩溃并显示0错误消息。

我得到的唯一消息是:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x0),但这对我没有任何帮助。

我还尝试使用NSLog覆盖代理中的 dealloc 方法,并且看起来在崩溃发生之前,它会被释放,我觉得非常奇怪。

我缺少什么?

谢谢。

1 个答案:

答案 0 :(得分:3)

问题可能是在viewDidLoad方法结束时,monthPicker对象被取消分配。

尝试将monthPicker改为属性,看看是否有效