Data repeat in UITableView when scrolling

I use bellow codes to show data on TableView but when scrolling, data repeat and other data lost.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [FileCompletedArray count];

}

cellForRowatindexpath ():

  • MKAnnotationView viewForAnnotation never called
  • Objective C: Sending arguments to a method called by a UIButton
  • On iOS, what are the differences between margins, edge insets, content insets, alignment rects, layout margins, anchors…?
  • Is there any ways to detect the roaming status on iOS 6?
  • in Collectionview how to set colors according to selection?
  • Error ITMS-90206 Invalid bundle contains disallowed file 'Frameworks'
  • - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        static NSString *CellIdentifier = @"CellIdentifier";
    
        UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    
            UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
            FileNameLabel.backgroundColor = [UIColor clearColor];
            FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
            FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
            FileNameLabel.textColor = [UIColor blackColor];
            NSLog(@"Reseversed TEMP array %@",FileCompletedArray);
            FileNameLabel.text =[FileCompletedArray objectAtIndex:indexPath.row];
            [cell.contentView addSubview: FileNameLabel];
            [FileNameLabel release];
    
    
    
        }
            return cell;
    }
    

    Do you have any solutions? Thanks in advance

    4 Solutions Collect From Internet About “Data repeat in UITableView when scrolling”

    use cell Identifier different

    For example like bellow…

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        NSString *CellIdentifier = [NSString stringWithFormat:@"%d,%d",indexPath.section,indexPath.row];
    
        UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            /// write your code here..
        }
    }
    

    OR set nil like bellow..

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        //static NSString *CellIdentifier = @"CellIdentifier";    
    
        UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:nil];
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
            /// write your code here..
        }
    }
    

    This problem is generated because Your UITableView Reuse Cell instant of create new one.
    I give you some suggestion that may be helpful for you.

    1) add Controller in between

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath   
      {
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            /// Your code of initialization of controller;
        }
    
        /// set property of controllers such like (Text UILabel, image of UIImageView...etc) .
     return cell;
    
    }
    

    1) Add Your Controller to cell.contentView.

    EDITED:

    Before You follow my Edited Answer i want to tell you that following code is bad for memory management because it will create new cell for each rows of UITableView, so be careful for it.

    But it is better for if UITableView Have Limited row about (50-100 may be ) os use following code if is it suitable for you.

    NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell == nil)
        {
              /// Your whole code of controllers;
        } 
    

    You are setting the text of the label only when creating a new cell. However, during cell reuse, new cell is not created. Hence your code for setting/changing text is not working. You can use this modified code.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        static NSString *CellIdentifier = @"CellIdentifier";
    
        UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        UILabel *FileNameLabel=nil;
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    
            FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
            FileNameLabel.tag = 1001;
            FileNameLabel.backgroundColor = [UIColor clearColor];
            FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
            FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
            FileNameLabel.textColor = [UIColor blackColor];
            [cell.contentView addSubview: FileNameLabel];
            [FileNameLabel release];
        }
        if(!FileNameLabel)
            FileNameLabel = [cell.contentView viewWithTag:1001];
        FileNameLabel.text =[FileCompletedArray objectAtIndex:indexPath.row];
    
        return cell;
    }
    

    Alternatively you can use the default textLabel instead of creating and adding new label

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = @"CellIdentifier";
    
        UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        UILabel *FileNameLabel=nil;
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
            cell.textLabel.font = [UIFont boldSystemFontOfSize:16];
            cell.textLabel.textColor = [UIColor blackColor];
        }
        cell.textLabel.text =[FileCompletedArray objectAtIndex:indexPath.row];
    
        return cell;
    }
    

    I also faced same problem, the problem occurs when we reuse the cells. At the time of reusing the data is already present in it and we write some more data also, to sort out this, i did a minor change to my table view delegate method cellForRowAtIndexPath. Here the code which i use always using table view.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
    }
    for (UIView *view in cell.contentView.subviews) {
        [view removeFromSuperview];
    }
    
    return cell;
    

    }

    The for loop gets executed when we are reusing some cell and what it does is removing all the previous data present in UITableViewCell

    Hope this will help someone.