Данные UITableView не сбрасываются и не могут перезагрузить новые данные - PullRequest
0 голосов
/ 13 декабря 2011

Я заполняю таблицу, состоящую из 4 меток в каждой строке при нажатии кнопки динамически.

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

Какие изменения мне нужно внести?

* .m

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(tableView==myTableView){

        return [tableData count];
    }
    else if(tableView==aTableView){
        return [a count];
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(tableView==myTableView){
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    }
    cell.textLabel.font=[UIFont fontWithName:@"Arial" size:12.0];
    cell.textLabel.text = [tableData objectAtIndex:indexPath.row]; 
    cell.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    return cell;
}
    else if(tableView==aTableView){

        static NSString *CellIdentifier=@"CellIdentifier"; 

        static NSInteger StateTag = 1;
        static NSInteger CapitalTag = 2;
        static NSInteger StateTag1 = 3;
        static NSInteger StateTag2 = 4;


        UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell == nil){

                cell=[[[UITableViewCell alloc]initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]autorelease];
                CGRect frame;
                frame.origin.x = 10; 
                frame.origin.y = 5;
                frame.size.height = 35;
                frame.size.width = 80;


                UILabel *capitalLabel = [[UILabel alloc] initWithFrame:frame];
                capitalLabel.tag = CapitalTag;
                [cell.contentView addSubview:capitalLabel];

                frame.origin.x += 135;
                UILabel *stateLabel = [[UILabel alloc] initWithFrame:frame];
                stateLabel.tag = StateTag;
                [cell.contentView addSubview:stateLabel];

                frame.origin.x += 100;
                UILabel *stateLabel1 = [[UILabel alloc] initWithFrame:frame];
                stateLabel1.tag = StateTag1;
                [cell.contentView addSubview:stateLabel1];

                frame.origin.x += 100;
                UILabel *stateLabel2 = [[UILabel alloc] initWithFrame:frame];
                stateLabel2.tag = StateTag2;
                [cell.contentView addSubview:stateLabel2];

                capitalLabel = (UILabel *) [cell.contentView viewWithTag:CapitalTag];
                stateLabel = (UILabel *) [cell.contentView viewWithTag:StateTag];
                stateLabel1 = (UILabel *) [cell.contentView viewWithTag:StateTag1];
                stateLabel2 = (UILabel *) [cell.contentView viewWithTag:StateTag2];

                capitalLabel.text=[a objectAtIndex:indexPath.row];
                stateLabel.text = [b objectAtIndex:indexPath.row];
                stateLabel1.text = [c objectAtIndex:indexPath.row];
                stateLabel2.text = [d objectAtIndex:indexPath.row];
            }            
            return cell;
        }
}


-(IBAction)btnClicked:(id)sender{
    NSMutableDictionary *cells = (NSMutableDictionary*)[self.aTableView valueForKey:@"_reusableTableCells"];
    [cells removeAllObjects];

    [self gainer];
}

-(IBAction)btnClicked1:(id)sender {

    [self looser];
}

-(void)gainer{   

    arr1=[[NSMutableArray alloc]init];
    arr2=[[NSMutableArray alloc]init];
    a=[[NSMutableArray alloc]init];
    b=[[NSMutableArray alloc]init];
    c=[[NSMutableArray alloc]init];
    d=[[NSMutableArray alloc]init];

    [a removeAllObjects];
    [b removeAllObjects];
    [c removeAllObjects];
    [d removeAllObjects];

    //POPULATING OF ARRAYS(a,b,c,d) IS DONE HERE. NOW using ReloadData to populate table.


    [self.aTableView reloadData];
}

-(void)looser{
    //SIMILAR LOGIC AS DEFINED IN gainer() method
}



- (void)viewDidLoad {

    myTableView = [[UITableView alloc]initWithFrame:CGRectMake(200, 31, 310,170)];
    myTableView.delegate = self;
    myTableView.dataSource = self;
    [self.view addSubview:myTableView];

    //code for fetch
    arr1=[[NSMutableArray alloc]init];
    arr2=[[NSMutableArray alloc]init];
    a=[[NSMutableArray alloc]init];
    b=[[NSMutableArray alloc]init];
    c=[[NSMutableArray alloc]init];
    d=[[NSMutableArray alloc]init];

    aTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen]applicationFrame] style:UITableViewStyleGrouped];
    aTableView.dataSource = self;
    aTableView.delegate = self;
    aTableView.frame = CGRectMake(100, 150, 200, 300);
    aTableView.tag=1;
    [self.view addSubview:aTableView];

    [super viewDidLoad];
}

ЛЮБЫЕ ПРЕДЛОЖЕНИЯ?

1 Ответ

1 голос
/ 13 декабря 2011

Создание пользовательской ячейки с XIB. Это немного упростит ваш код и фактически может ускорить его, потому что вы не выполняете поиск тегов. Создайте прямые свойства для меток, которые должны быть установлены. Если метка должна быть пустой, передайте nil свойству text метки.

Еще один совет - не делать позиционирование подпредставления в tableview:cellForRowAtIndexPath:, это может привести к непредсказуемым результатам и вместо этого следует использовать tableView:willDisplayCell:forRowAtIndexPath:.

Кстати, у вас есть несколько утечек со всеми вашими ярлыками, которые вы выделили, но не выпустили.

...