приложение вылетает при попытке прокрутить таблицу - PullRequest
0 голосов
/ 10 октября 2011

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

-(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;

}

Ответы [ 3 ]

4 голосов
/ 10 октября 2011

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

 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];
...
0 голосов
/ 11 декабря 2013

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

-(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;

}
0 голосов
/ 13 октября 2011

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  return [self.myArray count]; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...