2017-05-16 3 views
0

私はうまく動作しているように見えるピッカービューを使用していますが、時々スタックトレースがクラッシュしてエラーが発生します。UIPickerViewスクロールエラーが発生してクラッシュする可能性がありますか?

これは私のピッカービューの設定ですが、正常に動作しますが、ランダムではアプリケーションがクラッシュする可能性があります。

何か原因が考えられますか?

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { 
       return 1; 
      } 

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { 
       return _pickerChannels.count; 
      } 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
       UILabel *labelSelected = (UILabel*)[_channelPickerView viewForRow:row forComponent:component]; 
       [labelSelected setTextColor:[UIColor whiteColor]]; 
       self.channelGroupValue = [_pickerChannels indexOfObject:_pickerChannels[row]]; 
       [[self delegate] sideBarDidScrollChannels:self.channelGroupValue]; 
       [[self delegate] sideBarDidSetScrollChannels:self.channelGroupValue]; 
      } 

- (UIView *) pickerView: (UIPickerView *) pickerView viewForRow: (NSInteger) row forComponent: (NSInteger) component reusingView:(UIView *)view { 
     UILabel *label = (id)view; 
     if (!label) 
     { 
      label= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [_channelPickerView rowSizeForComponent:component].width, 
                     [_channelPickerView rowSizeForComponent:component].height)]; 
      label.textAlignment = NSTextAlignmentCenter; 
      label.textColor = [UIColor whiteColor]; 
      [label setFont:[UIFont systemFontOfSize:17]]; 
      label.text = _pickerChannels[row]; 
     } 
     return label; 
    } 

これは私がクラッシュに提供できる唯一の情報です:

enter image description here

+1

クラッシュログを表示 – Himanth

+0

どの部分ですか?デバッガで何も表示されません。 – jcad

+0

label.text = _pickerChannels [component];このlabel.text = _pickerChannels [row]の代わりにこれを試してみてください。 –

答えて

0

クラッシュは約CDCControl setTCPWriteだと思いますが、これはスタック上にあるように、マルチスレッドを使用しているためにときどき発生します。
さらに指定するには、CDCControl setTCPWriteを同時に呼び出す2つのスレッドがあります。

+0

これをどのように絞り込むことができますか?あなたのネットワーク通信(アプリケーションは遠隔です)とこのクラッシュが数回起こるのが見えます。速いメッセージ転送(例えば、uipickerviewを通る行) – jcad

+0

' - (void)pickerView: (UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component'? NSLockをデリゲートメソッドまたは前に追加することができます '[CDCControl setTCPWrite]' –

0

あなたpickerChannels配列が動的である場合、他の操作と値の変化すると、それがなった場合にされている場合、私は意味しますそれでは、クラッシュする可能性はありません。あなたのビューがラベルである場合、あなたがやっている理由

第二の事、

UILabel *label = (id)view; 

は、あなたはviewForRow

UILabel *label = (UILabel*)view; 

、などの方法を行うことができますが、 UIViewを返す必要がありますので、 UIViewを返します! UIVIewにラベルを追加して、 viewを返すことができます!

+0

ありがとうございます。固定数の文字列をスクロールさせるのではありません。それはそれがそうでないようにラベルの変更でまだクラッシュする!スクリーンショットでOPを更新しました – jcad

関連する問題