2015-02-06 2 views
0

Это UITableView numberOfRowsInSection не вызывает. но cellForRowAtIndexPath не вызывается. Я не понимаю, почему cellForRowAtIndexPath не вызывается. если я Retun номер строки в секцииiOS UITableView cellForRowAtIndexPath не вызывается

return (allOfficedata.count >0)? allOfficedata.count + 1 : allOfficedata.count; 

или

return [array count]+1; 
if (allOfficedata.count >0) return [allOfficedata count] + 1; 

не вызывающей cellforrowatindexpath, если я дать обратный массив рассчитывать; или вернуть 11; его работает отлично Belove я прикрепил мой код, Ошибки

*****, истекающее приложение из-за неперехваченное исключение 'NSRangeException', причина: "* - [__ NSArrayM objectAtIndex]: индекс 10 за пределы [0. . 9]

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView==self.LeftMenuTable) 
     return leftOptions.count; 
    return [allOfficedata count]+1; 

} 
********************************************************************** 
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView==self.LeftMenuTable) 
     return 60; 

    Feedmodel *fmodel=[allOfficedata objectAtIndex:indexPath.row]; 
    NSString *checkType = fmodel.achievementType; 
    if (isPad) 
    { 
     if (indexPath.row == 0) 
     { 
      return (isPad)?300.0:434.0; 
     } 
     else if (indexPath.row == allOfficedata.count+1) 
      {return 30.0;} 
     else{ 
     if (![checkType isEqualToString:@""] || [checkType isEqualToString:@"0"] || [checkType isEqualToString:@"1"]) 
      return ([fmodel.feedCommentCount integerValue] > 0)?366:318; 
     else 
      return ([fmodel.feedCommentCount integerValue] > 0)?249:200; 
     } 
     return 0.0; 
    } 
    else 
    { 
     if (indexPath.row == 0) 
     { 
      return (isPad)?232.0:434.0; 
     } 
     else 
     { 
      if (![checkType isEqualToString:@""] || [checkType isEqualToString:@"0"] || [checkType isEqualToString:@"1"]) 
       return ([fmodel.feedCommentCount integerValue])?259:222; 
      else 
       return ([fmodel.feedCommentCount integerValue])?184:142; 
     } 
     return 0.0; 
    } 
} 
*************************************************************** 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier3 = @"loadMore"; 
    static NSString *CellIdentifier = @"TableViewCell"; 

    if (tableView==self.LeftMenuTable) 
    { 
     TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
      NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
      cell = [topLevelObjects objectAtIndex:0]; 

      UIView *sepView=[[UIView alloc ]initWithFrame:CGRectMake(0,59, 250, 1)]; 
      [cell.contentView addSubview:sepView]; 
      [sepView setBackgroundColor:[UIColor grayColor]]; 
     } 

     cell.cellTextLabel.textColor=[UIColor whiteColor]; 
     [cell.cellTextLabel setText:[[leftOptions objectAtIndex:indexPath.row] valueForKey:@"name"]]; 
     [cell.CellImageView setImage:[UIImage imageNamed:[[leftOptions objectAtIndex:indexPath.row] valueForKey:@"image"]]]; 
     cell.selectionStyle=UITableViewCellSelectionStyleNone; 
     cell.backgroundColor=[UIColor clearColor]; 

     return cell; 
    } 
    else 
    { 
     NSUInteger row = [indexPath row]; 
     NSInteger countRoe = [allOfficedata count]; 
      if (row == countRoe) 
      { 


       UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier3]; 
       if (cell == nil) { 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier3]; 
       } 
       cell.textLabel.text = @"LoadMore"; 
       return cell; 

      }else 
     { 
      if (indexPath.row == 0) 
      { 
       //CellCallOutBox_Onboarding_iPad 
       //CellCalloutbox_Office_iPad 
       //CellCalloutbox_Office_iPhone 

       NSString *nibName; 
       if ([calloutOffice.is_empty_daily_mission isEqualToString:@"false"]) { 
        nibName = (isPad)[email protected]"CellCalloutbox_Office_iPad":@"CellCalloutbox_Office_iPhone"; 

       } 
       else if ([calloutOffice.is_empty_onboarding_mission isEqualToString:@"false"]) 
       { 
        nibName = (isPad)[email protected]"CellCallOutBox_Onboarding_iPad":@"CellCallOutBox_Onboarding_iPhone"; 
       } 
       else if ([calloutOffice.is_empty_community_mission isEqualToString:@"false"]) 
       { 
        nibName = (isPad)[email protected]"CellCallOutBox_Onboarding_iPad":@"CellCallOutBox_Onboarding_iPhone"; 
       } 

       CellCalloutbox_Office *cellcallout = (CellCalloutbox_Office *)[tableView dequeueReusableCellWithIdentifier:nibName]; 

       if (cellcallout == nil) 
       { 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; 
        cellcallout = [nib objectAtIndex:0]; 
       } 
       cellcallout.aMissionDelegate = self; 
       [cellcallout.btnVideoOfTheDay addTarget:self action:@selector(videoOfTheDay) forControlEvents:UIControlEventTouchUpInside]; 
       cellcallout.backgroundColor=[UIColor clearColor]; 
       [cellcallout setArraywithCallOut:calloutOffice expanded:isCallOutOfficeExpanded]; 
       [cellcallout.btnBackCallout addTarget:self action:@selector(calloutBack) forControlEvents:UIControlEventTouchUpInside]; 
       [cellcallout.btnDailyMission addTarget:self action:@selector(openCalloutDilyMission) forControlEvents:UIControlEventTouchUpInside]; 

       return cellcallout; 
      } 


      Feedmodel *fmodel=[allOfficedata objectAtIndex:indexPath.row]; 
      NSString *checkType = fmodel.achievementType; 

      if (![checkType isEqualToString:@""] || [checkType isEqualToString:@"0"] || [checkType isEqualToString:@"1"]) 

      { 
       static NSString *simpleTableIdentifier = @"CellWithImageVideo"; 

       CellWithImageVideo *cell = (CellWithImageVideo *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
       NSString *nibNmaeForiPad = (([fmodel.feedCommentCount integerValue])[email protected]"CellWithImage_Comment_iPad":@"Cell_WithImage_MyOffice_iPad"); 
       NSString *nibNmaeForiPhone = (([fmodel.feedCommentCount integerValue])[email protected]"CellWithImagewithComment_iPhone":@"CellWithImageVideo"); 
       if (cell == nil) 
       { 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:(isPad)?nibNmaeForiPad:nibNmaeForiPhone owner:self options:nil]; 
        cell = [nib objectAtIndex:0]; 
       } 
       cell.backgroundColor=[UIColor clearColor]; 
       cell.contentView.backgroundColor=[UIColor clearColor]; 
       [cell setFeeddata:fmodel indexPath:indexPath]; 


       [cell.hifiveBtn   addTarget:self action:@selector(hifiveClickedMyOfiice:) forControlEvents:UIControlEventTouchUpInside]; 
       [cell.playMintBtn  addTarget:self action:@selector(getFeedDetails:) forControlEvents:UIControlEventTouchUpInside]; 
       [cell.planToDoBtn  addTarget:self action:@selector(planToDoClickedOffice:) forControlEvents:UIControlEventTouchUpInside]; 
       [cell.userImageBtn  addTarget:self action:@selector(gotouserProfile:) forControlEvents:UIControlEventTouchUpInside]; 
       [cell.inspireBtn  addTarget:self action:@selector(InspireClicked:) forControlEvents:UIControlEventTouchUpInside]; 
       [cell.sendCommentBtn addTarget:self action:@selector(serverCommentPost:) forControlEvents:UIControlEventTouchUpInside]; 
       [cell.btnCompliment  addTarget:self action:@selector(getFeedCommentPopup:) forControlEvents:UIControlEventTouchUpInside]; 

       cell.txtFldCommentField.delegate = self; 
       return cell; 
      } 
      else 
      { 
       static NSString *simpleTableIdentifier = @"CellWithoutImage"; 
       NSString *nibNmaeForiPad = (([fmodel.feedCommentCount integerValue])[email protected]"Cell_withoutImage_withcomment_iPad":@"Cell_withoutImage_Ipad_Office"); 
       NSString *nibNmaeForiPhone = (([fmodel.feedCommentCount integerValue])[email protected]"CellWithoutImagewithComment_iPhone":@"CellWithoutImage"); 


       CellWithoutImage *cell = (CellWithoutImage *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
       if (cell == nil) 
       { 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:(isPad)?nibNmaeForiPad:nibNmaeForiPhone owner:self options:nil]; 
        cell = [nib objectAtIndex:0]; 
       } 
       [cell setFeeddata:fmodel indexPath:indexPath]; 
       cell.backgroundColor=[UIColor clearColor]; 
       cell.contentView.backgroundColor=[UIColor clearColor]; 



       [cell.hifiveBtn   addTarget:self action:@selector(hifiveClickedMyOfiice:)   forControlEvents:UIControlEventTouchUpInside]; 
       [cell.planToDoBtn  addTarget:self action:@selector(planToDoClickedOffice:)   forControlEvents:UIControlEventTouchUpInside]; 
       [cell.userImageBtn  addTarget:self action:@selector(gotouserProfile:)     forControlEvents:UIControlEventTouchUpInside]; 
       [cell.inspireBtn  addTarget:self action:@selector(InspireClicked:)     forControlEvents:UIControlEventTouchUpInside]; 
       [cell.btnCompliment  addTarget:self action:@selector(getFeedCommentPopup:)     forControlEvents:UIControlEventTouchUpInside]; 
       [cell.sendCommentBtn  addTarget:self action:@selector(serverCommentPost:)    forControlEvents:UIControlEventTouchUpInside]; 
       [cell.btnTextMintTapped addTarget:self action:@selector(getFeedDetails:)    forControlEvents:UIControlEventTouchUpInside]; 

       cell.txtFldComment.delegate = self; 
       return cell; 
      } 
     } 
    } 
} 
+0

Проверьте значение, возвращаемое в 'numberOfRowsInSection'. –

+0

i 'm return return [allOfficedata count] +1; тот же вопрос –

+0

Я понятия не имею, что значение '[allOfficedata count] + 1', как я могу это знать? –

ответ

2

Так ваше высказывание allOfficedata + 1 для numberOfRowsInSection но в heightForRowAtIndexPath: у вас есть следующие строки:

Feedmodel *fmodel=[allOfficedata objectAtIndex:indexPath.row]; 

Это вызывает ваш CRA sh в последней ячейке, поэтому вы хотите проверить, является ли она последней ячейкой, и если она делает что-то еще.

Edit:

Как и что вы, кажется, делают подобную вещь в cellForIndexPath,

вы делаете что-то, если (indexPath == 0), но после этого на следующей клетке вы получите:

Feedmodel *fmodel=[allOfficedata objectAtIndex:indexPath.row]; 

вы должны - 1 из indexPath.row, как в настоящее время прибудет для ячейки в, позволяете сказать, что indexPath.row == 1, ваш прошу для объекта с индексом 1, где, я думаю, вы должны спросить 0. Как только вы дойдете до последней ячейки, приложение выйдет из строя на вышеуказанной строке.

Edit 2:

Так что проблема ваш просят allOfficedata для индекса, который не существует, когда вы говорите allOfficedata + 1 для строк, и когда он попадает в heightForRowAtIndexPath для последней ячейки в таблице это запрашивает данные из allOfficedata для индекса, которого нет, потому что он ищет +1, который вы указали в numberOfRowsInSection

Так что давайте скажем, что счетчик allOfficedata равен 10 (индекс 0-9), и мы сказали, что количество строк в таблице - allOfficedata + 1, поэтому его 11 (индекс 0-10).

Теперь в heightForRowAtIndexPath мы получаем последнюю ячейку (индекс 10), allOfficedata не имеет ее, потому что ее индекс равен 0-9. вы запрашиваете allOfficedata для индекса 10, он сработает.

+0

можете рассказать больше информации? –

+0

его не вызывающий cellforrowatindexpath. –

+0

Я попытался привести пример еще немного. Он не попадет в cellAtIndexPath, поскольку до этого он будет разбиваться на heightForRowAtIndexPath. – BooRanger

0

NSArray выходит за пределы ..

  • 10 значений в массиве от 0 до 9 [не от 1 до 10]
  • В таблице индексов также же, от 0 до 9 [не от 1 до 10]

так indexpath.row даст вам правильное значение для определения значения из массива в правильном положении

+0

Я проверил это. в то время как i m возвращает значение там, где возникает ошибка. если я дал вручную return 11, значит, он работает, если я возвращаюсь так, это означает возврат NSArray.count + 1; означает ist, показывающий эту ошибку. ** ende issue fix cheyyan help me ** –

0

Наиболее вероятная причина, по которой cellForRowAtIndexPath не вызывается, за исключением ошибочного числа строк, заключается в том, что в представлении таблицы нет строк для отображения.

cellForRowAtIndexPath будет вызываться только тогда, когда нужна ячейка. У вас, кажется, есть ячейки с очень большими высотами, смотрящими на ваш код. Не удалось увидеть код для просмотра или высоты заголовка раздела.

Поэтому, учитывая большие высоты, особенно для строки 0, кажется (300 или 400 в соответствии с вашим кодом), не будет много вызовов этой функции, если вы не прокрутите вверх. При прокрутке вы должны увидеть больше вызовов для ячеек.

Также проверьте, верните ли вы 0 для высоты, поскольку это также может остановить его, пытаясь показать ячейку, на которую я думаю, поскольку она не будет видна.

Он будет запрашивать высоту каждой строки для оценки необходимого размера полосы прокрутки.

Смежные вопросы