0

В моем приложении я хочу отобразить две пользовательские ячейки в одном представлении таблицы с выбором сегмента. Когда пользователь нажимает на сегмент = 0, отображает первую пользовательскую ячейку, а сегмент = 1 отображает вторую пользовательскую ячейку. Вот мой код.Как сохранить две пользовательские ячейки в одном представлении таблицы с сегментированным контролем?

-(void)callSegmentSelected 
{ 
value = (int)segment.selectedSegmentIndex; 
if (segment.selectedSegmentIndex == 0) 
{ 
     NSString *UDID = [[NSUserDefaults standardUserDefaults]objectForKey:@"kPrefKeyForUserID"]; 
     NSString *catId = [[NSUserDefaults standardUserDefaults]objectForKey:@"kPrefKeyForCatID"]; 
     NSString *sessionKey = @"akjsda9s8dadandlakd9"; 
     NSString *urlString = [NSString stringWithFormat:@"API"]; 
     NSString *jsonString = [NSString stringWithFormat:GETCONTEST,catId,UDID,sessionKey]; 
     NSData *myJSONData =[jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
     [request setURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"POST"]; 
     NSMutableData *body = [NSMutableData data]; 
     [body appendData:[NSData dataWithData:myJSONData]]; 
     [request setHTTPBody:body]; 
     NSError *error; 
     NSURLResponse *response; 
     NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
     NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
     if(str.length > 0) 
     { 
      NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding]; 
      NSError *error; 
      NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]); 
      fldExamTitleArray =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; 
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      [defaults setObject:[NSString stringWithFormat:@"%d", [[[fldExamTitleArray objectAtIndex:0] valueForKey:@"examid"] intValue]] forKey:@"kPrefKeyForExamID"]; 
      NSLog(@"Examid: %@", [defaults objectForKey:@"kPrefKeyForExamID"]); 
      [defaults synchronize]; 
      [progressHud hide:YES]; 
      [self.myContestTableView reloadData]; 
     } 
     else 
     { 
      NSLog(@"Error"); 
     } 
} 
else if (segment.selectedSegmentIndex == 1) 
{ 
} 
else if (segment.selectedSegmentIndex == 2) 
{ 
} 

и здесь cellForRowAtIndexPath

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (value == 0) 
{ 
    static NSString *cellId = @"Cell"; 
    ContestTableViewCell * cell = (ContestTableViewCell *)[myContestTableView dequeueReusableCellWithIdentifier:cellId]; 
    if (cell == nil) 
    { 
     NSArray *myNib; 
     myNib = [[NSBundle mainBundle]loadNibNamed:@"ContestTableViewCell" owner:self options:nil]; 
     cell = [myNib objectAtIndex:0]; 
    } 
    cell.fldExamTitleLbl.text = [[fldExamTitleArray objectAtIndex:indexPath.row]valueForKey:@"fldexamtitle"]; 
} 
else 
{ 
    if (value == 1) 
    { 
     static NSString * cellIdentifier = @"Cell2"; 
     ContestRewardCell *cell = (ContestRewardCell *)[myContestTableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if (cell == nil) 
     { 
      NSArray *myNib; 
      myNib = [[NSBundle mainBundle]loadNibNamed:@"ContestRewardCell" owner:self options:nil]; 
      cell =[myNib objectAtIndex:0]; 
     } 
     cell.examTitleLbl.text = [[fldExamTitleArray objectAtIndex:indexPath.row]valueForKey:@"fldexamtitle"]; 
} 
return nil; 
} 

я получаю эту ошибку,

Нагрузочного приложение из-за неперехваченное исключение 'NSInternalInconsistencyException', причина: «UITableView (; слой =; contentOffset: { 0, 0}; contentSize: {320, 468}>) не удалось получить ячейку из своего dataSource() '

Здесь я не внедряю этот метод, так что данные не отображаются в моем столе.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (value1 == 0) 
{ 
    return 102; 
} 
else if(value1 == 1) 
{ 
    return 193; 
} 
return 0; 
} 
+1

Где возвращение клетки? вы всегда возвращаете ноль! Вопрос показывает отсутствие отладки с конца OP. – Vizllx

+0

BTW - вы не приняли ни одного ответа на любой из ваших прошлых вопросов. Вы действительно должны вернуться и принять любой ответ, который разрешил ваши вопросы. – rmaddy

+0

@rmaddy, который отвечает не для меня. –

ответ

1

Вы вернулись nil в cellForRowAtIndexPath

использования как следующие:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (value == 0) 
{ 
    static NSString *cellId = @"Cell"; 
    ContestTableViewCell * cell = (ContestTableViewCell *)[myContestTableView dequeueReusableCellWithIdentifier:cellId]; 
    if (cell == nil) 
    { 
     NSArray *myNib; 
     myNib = [[NSBundle mainBundle]loadNibNamed:@"ContestTableViewCell" owner:self options:nil]; 
     cell = [myNib objectAtIndex:0]; 
    } 
    cell.fldExamTitleLbl.text = [[fldExamTitleArray objectAtIndex:indexPath.row]valueForKey:@"fldexamtitle"]; 
    return cell; 
} 
else 
{ 
    if (value == 1) 
    { 
     static NSString * cellIdentifier = @"Cell2"; 
     ContestRewardCell *cell = (ContestRewardCell *)[myContestTableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if (cell == nil) 
     { 
      NSArray *myNib; 
      myNib = [[NSBundle mainBundle]loadNibNamed:@"ContestRewardCell" owner:self options:nil]; 
      cell =[myNib objectAtIndex:0]; 
     } 
     cell.examTitleLbl.text = [[fldExamTitleArray objectAtIndex:indexPath.row]valueForKey:@"fldexamtitle"]; 
     return cell; 

} 
return nil; 
} 
+0

похоже на мой код. Какие изменения в этом коде –

+0

@MangiReddy Вы не заметили, что две возвращаемые ячейки: 'заявления добавлены там, где они должны быть? – rmaddy

+0

ok.i получил это @ rmaddy –

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

  • Нет связанных вопросов^_^