приложение вылетает, когда я пытаюсь прокрутить tableview

#objective-c #ios #uitableview

#objective-c #iOS #uitableview

Вопрос:

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

 -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

    NSLog(@"indexPath.row---%d",indexPath.row);
    UILabel *skuLbl;
//   *cellImgView;
    static NSString *cellIdentifier=@"Cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell==nil){
        NSLog(@"indexPath cell");
        cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]autorelease];
        UIImageView *cellImgView=[[UIImageView alloc]initWithFrame:CGRectMake(25,20,717,125)];
        cellImgView.image=[UIImage imageNamed:@"cell.png"];
        [cell.contentView addSubview:cellImgView];
        skuLbl=[[UILabel alloc]initWithFrame:CGRectMake(62,20,680,125)];
        skuLbl.backgroundColor=[UIColor clearColor];
        skuLbl.font=[UIFont fontWithName:@"helvetica" size:40];
        skuLbl.textColor=[UIColor blackColor];
        [cell.contentView addSubview:skuLbl];
        cell.selectionStyle=NO;    
        tableView.separatorColor=[UIColor whiteColor];
    }



//  NSLog(@"inside cell--%@",[[appDelegateObj.parsedRowsSku objectAtIndex:indexPath.row]objectForKey:@"SKU"]);
//  skuLbl.text=[[appDelegateObj.parsedRowsSku objectAtIndex:indexPath.row]objectForKey:@"SKU"];
    skuLbl.text=[NSString stringWithFormat:@"%d",indexPath.row];
    return cell;

}
  

Комментарии:

1. Спасибо за очень читаемый код.

2. Вы подключили отладчик? Если да, то в какой строке прерывается код?

3. -1: Ваш первоначальный вопрос был абсолютно неформатным. После того, как вы уже задали более 20 вопросов, вы должны знать, как форматировать. И вы должны знать, что публикация информации о сбое (исключения, сообщения в отладчике и т. Д.) Практически обязательна. Должны ли мы угадать, какой сбой произошел? Вы хотите, чтобы мы вам помогли, поэтому, пожалуйста, помогите нам, приложив больше усилий к вашему вопросу.

4. Я не вижу никакого источника сбоя. НО: вы никогда не выпускаете cellImgView и skuLbl. Почему бы не разместить [skuLbl release] и [cellImgView release] после добавления их в подпредставление?

Ответ №1:

Когда вы прокручиваете представление таблицы, оно пытается повторно использовать свои ячейки, поэтому

  if(cell==nil){        
    ...
 }
  

может не вызываться, и ваш указатель skuLbl остается не инициализированным. Итак, позже вы пытаетесь получить доступ к этому недопустимому указателю, и это приводит к сбою.

Вам нужно получить ссылку на метку вне блока инициализации, чтобы убедиться, что она всегда действительна:

 UILabel *skuLbl = nil;
static NSString *cellIdentifier=@"Cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell==nil){
    ...
    skuLbl.tag = 100;
    ...
}
skuLbl = (UILabel*)[cell.contentView viewWithTag:100];
...
  

Ответ №2:

убедитесь, что количество строк равно размеру вашего массива или тому, что вы используете с помощью этого метода:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  return [self.myArray count]; }
  

Ответ №3:

Отредактируйте свой код, как показано ниже::

 -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    UILabel *skuLbl = nil;
    static NSString *cellIdentifier=@"Cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell==nil) {
        cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]autorelease];

        UIImageView *cellImgView=[[UIImageView alloc]initWithFrame:CGRectMake(25,20,717,125)];
        cellImgView.image=[UIImage imageNamed:@"cell.png"];
        [cell.contentView addSubview:cellImgView];

        skuLbl=[[UILabel alloc]initWithFrame:CGRectMake(62,20,680,125)];
        skuLbl.tag = 100;
        skuLbl.backgroundColor=[UIColor clearColor];
        skuLbl.font=[UIFont fontWithName:@"helvetica" size:40];
        skuLbl.textColor=[UIColor blackColor];
        [cell.contentView addSubview:skuLbl];

        cell.selectionStyle=NO;    
        tableView.separatorColor=[UIColor whiteColor];
    } else {
       // This method called at creation and scrolling of tableview for every individual cell. 
       // Due to creation and scrolling of tableview skuLbl refrence get nil
       // So get new refrence of skuLbl from cell's contentView as below
       skuLbl = (UILabel*)[cell.contentView viewWithTag:100];
    }

    skuLbl.text=[NSString stringWithFormat:@"%d",indexPath.row];
    return cell;

}