UIPickerView 不加载行
UIPickerView not loading rows
目前正在开发一款使用 CoreData 发现火车的应用程序。基本上,每列火车都存储有一组相应的目击事件。当用户看到火车时,他们会记录一次目击,并且该目击与火车序列号相关联(只是基本数据关系)
我正在尝试用序列号填充 UIPickerView
,但是我 运行 遇到了一些困难。我打算多次使用这个特定的 PickerView,所以它有自己的 class,并且没有在 ViewController 中实现。
我已正确设置委托和数据源,但从未填充 PickerView。从每个函数中的 NSLog
和 printf
代码我可以看出 titleForRow
从未被调用,numberOfRowsInComponent
也没有被调用 这是我的 [=12= 代码] class:
-(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 需要是视图控制器的实例变量,这样它就不会被垃圾回收(在 .h 中作为 属性 或在 .m 文件的接口部分中)。如果您使用的是 ARC,则在 viewDidLoad 中为其创建一个局部变量将导致它被垃圾回收。
目前正在开发一款使用 CoreData 发现火车的应用程序。基本上,每列火车都存储有一组相应的目击事件。当用户看到火车时,他们会记录一次目击,并且该目击与火车序列号相关联(只是基本数据关系)
我正在尝试用序列号填充 UIPickerView
,但是我 运行 遇到了一些困难。我打算多次使用这个特定的 PickerView,所以它有自己的 class,并且没有在 ViewController 中实现。
我已正确设置委托和数据源,但从未填充 PickerView。从每个函数中的 NSLog
和 printf
代码我可以看出 titleForRow
从未被调用,numberOfRowsInComponent
也没有被调用 这是我的 [=12= 代码] class:
-(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 需要是视图控制器的实例变量,这样它就不会被垃圾回收(在 .h 中作为 属性 或在 .m 文件的接口部分中)。如果您使用的是 ARC,则在 viewDidLoad 中为其创建一个局部变量将导致它被垃圾回收。