2017-05-16 53 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

+0

任何想法如何我可以縮小這個?它與我的網絡通信(應用程序是一個遠程),並且我發現這種崩潰發生在快速消息傳輸的幾次(例如通過uipickerview旋轉的行) – jcad

+0

您是否在' - (void)pickerView中發送互聯網請求: (UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component'?也許你可以在委託方法中或'[CDCControl setTCPWrite]'之前添加NSLock –

0

如果您pickerChannels陣列是動態的,我的意思是如果改變其與其他業務價值,如果它成爲零,那麼它可能會崩潰。

爲什麼你正在做的第二件事,

UILabel *label = (id)view; 

如果你的觀點是標籤,那麼你可以不喜歡,

UILabel *label = (UILabel*)view; 

viewForRow方法返回UIView,所以你應該返回UIView!你可以添加標籤到一個UIVIew,並可以返回view

+0

感謝ive使標籤更改,如數組。它並沒有改變其固定數量的字符串滾動。它仍然與標籤變化崩潰,所以沒有!更新了屏幕截圖 – jcad