2016-08-25 4 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]; 
} 

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

「TrainPicker」とは何ですか? '_trainPickerScroller'をどこで初期化しますか? –

+0

'TrainPicker'は' UIPickerView'のための私のクラスです: '@interface TrainPicker:UIPickerView 'のように。 '_trainPickerScroller'はピッカー自体のコンセントです。 – Swemoph

+0

これは奇妙に思えますが、2つのピッカービューがあり、データソースとしてのみ使用されます。とにかく、問題は、あなたが 'mypicker'への強い参照を持っておらず、割り当てが解除されているということです。 –

答えて

1

TrainPickerはビューコントローラのインスタンス変数である必要があります。ガベージコレクションされないようにする必要があります(プロパティとして.hまたは.mファイルのインターフェイスセクション内の.h)。 viewDidLoadにローカル変数を作成すると、ARCを使用している場合にはガベージコレクションされます。

+0

ありがとうございました!ヘッダファイルの '@property 'として設定してください。これはうまくいきました。 – Swemoph

関連する問題