2016-08-25 69 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