Objective c 为UIPickerView创建委托和数据源

Objective c 为UIPickerView创建委托和数据源,objective-c,delegates,uipickerview,uipickerviewdelegate,Objective C,Delegates,Uipickerview,Uipickerviewdelegate,我试图在一个单独的文件中为UIPickerView创建一个委托和一个数据源。在ViewController中,我有: - (void)viewDidLoad { [super viewDidLoad]; UIPickerView *myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 200, 320, 200)]; MonthPicker *monthPicker = [[MonthPick

我试图在一个单独的文件中为UIPickerView创建一个委托和一个数据源。在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];
}
蒙斯皮克

#import <UIKit/UIKit.h>

@interface MonthPicker : NSObject<UIPickerViewDelegate,UIPickerViewDataSource>

@end
目前,我只使用占位符值来让代理工作。每次编译都正常,但当我运行应用程序并转到包含选择器的视图时,它会在控制台中崩溃,并显示0条错误消息

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

我还尝试用NSLog覆盖委托中的dealloc方法,似乎在崩溃发生之前,它会被解除分配,我发现这非常奇怪

我错过了什么


谢谢。

问题可能是在viewDidLoad方法结束时,monthPicker对象被释放


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

问题可能是在viewDidLoad方法结束时,monthPicker对象被释放


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

问题可能是在viewDidLoad方法结束时,monthPicker对象被释放


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

问题可能是在viewDidLoad方法结束时,monthPicker对象被释放


试着把monthPicker变成一个财产,看看这是否有效

这绝对是个问题。picker视图没有保留其委托/数据源,因此必须将其保留在其他位置。各位摇滚乐,非常感谢,它现在工作得非常好。这绝对是问题所在。picker视图没有保留其委托/数据源,因此必须将其保留在其他位置。各位摇滚乐,非常感谢,它现在工作得非常好。这绝对是问题所在。picker视图没有保留其委托/数据源,因此必须将其保留在其他位置。各位摇滚乐,非常感谢,它现在工作得非常好。这绝对是问题所在。picker视图没有保留它的委托/数据源,所以它必须保留在其他地方。你们太棒了,非常感谢,它现在工作得很好。
#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