2016-08-25 68 views
0

目前正在使用CoreData查找列车的应用程序。基本上,每列火车都存储有相应的一组目击。当用户看到一列火车时,他们会记录一次发现,并将发现绑定回火车序列号(只是基本的数据关系)UIPickerView未加载行

我试图用序列号填充UIPickerView,但是我遇到了一些困难。我打算多次使用这个特定的PickerView,所以它有它自己的类,并没有在ViewController中实现。

我已经正确设置了委托和数据源,但PickerView从未被填充过。从NSLogprintf代码,在每个功能我可以告诉大家,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]; 
} 

视图控制器代码:

- (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. 
} 
+0

什么是'TrainPicker'?你还在哪里初始化'_trainPickerScroller'? –

+0

'TrainPicker'是我的'UIPickerView'类,就像这样:'@interface TrainPicker:UIPickerView '。 '_trainPickerScroller'是选取器本身的出口。 – Swemoph

+0

这似乎很奇怪,你有2个选择器视图,只有一个只用作数据源?无论如何,我想问题是你没有强烈的引用'mypicker'并且它正在被释放。 –

回答

1

TrainPicker需要是视图控制器的实例变量,以便它不被垃圾收集(在.h中作为属性或在.m文件中的接口部分中)。在viewDidLoad中为它创建一个局部变量会导致它在使用ARC时被垃圾收集。

+0

谢谢!在我的头文件中将它设置为'@ property',这已经起作用了。 – Swemoph