UIPickerView 不加载行
Posted
技术标签:
【中文标题】UIPickerView 不加载行【英文标题】:UIPickerView not loading rows 【发布时间】:2016-08-25 10:45:17 【问题描述】:目前正在开发一个使用 CoreData 发现火车的应用程序。基本上,每列火车都存储有一组相应的目击记录。当用户看到火车时,他们会记录一次目击事件,并且该目击事件与火车序列号相关联(只是基本数据关系)
我正在尝试用序列号填充UIPickerView
,但是我遇到了一些困难。我计划多次使用这个特定的 PickerView,所以它有自己的类并且不在 ViewController 中实现。
我已正确设置委托和数据源,但从未填充 PickerView。从每个函数中的NSLog
和printf
代码中,我可以看出titleForRow
从未被调用过,numberOfRowsInComponent
也不会被调用这是我的UIPickerView
类代码:
-(id)init
//init super class.
self = [super init];
//get allocate array reader (TrainSightingReaderWriter) then set the array that this picker will be getting data from.
[self setArrayReader:[[TrainSightingReaderWriter alloc] init]];
[self setArray: [[self arrayReader] getTrainSerialArray]];
NSLog(@"INIT PickerView");
//return this object.
return self;
-(int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
printf("At component counter\n");
return 1;
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
printf("At counter. %d is output\n", _array.count);
return _array.count;
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
NSLog(@"Returning a value.");
return [self array][row];
ViewController 代码:
- (void)viewDidLoad
[super viewDidLoad];
NSLog(@"We have made it to the AddSightVC.");
TrainPicker * mypicker;
mypicker = [[TrainPicker alloc]init];
//ISSUES
_trainPickerScroller.delegate = mypicker;
_trainPickerScroller.dataSource = mypicker;
[_trainPickerScroller reloadAllComponents];
[_trainPickerScroller reloadInputViews];
// Do any additional setup after loading the view.
【问题讨论】:
TrainPicker
是什么?还有你在哪里初始化_trainPickerScroller
?
TrainPicker
是我的 UIPickerView
类,如下所示:@interface TrainPicker : UIPickerView <UIPickerViewDelegate, UIPickerViewDataSource>
。 _trainPickerScroller
是选择器本身的出口。
这似乎很奇怪,您有 2 个选择器视图,一个仅用作数据源?无论如何,我想问题是您没有强烈引用 mypicker
并且它正在被释放。
【参考方案1】:
TrainPicker 需要是视图控制器的实例变量,以便它不会被垃圾收集(在 .h 作为属性或在 .m 文件的接口部分中)。如果您使用 ARC,在 viewDidLoad 中为其创建一个局部变量将导致它被垃圾回收。
【讨论】:
谢谢!!在我的头文件中将其设置为@property
,这已经奏效了。以上是关于UIPickerView 不加载行的主要内容,如果未能解决你的问题,请参考以下文章