2011-12-13 56 views
0

我正在填充表中包含每个行上的4个标签,并在动态按钮上单击。UITableView数据没有被刷新并且无法重新传输新数据

当我试图动态地将不同的数据插入到同一个表中时,它不会刷新旧数据,因此旧数据会重叠在新数据上。

我需要做些什么改变?

* .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 *[email protected]"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

使用XIB创建自定义单元格。这会简化你的代码,实际上可能会加速你的代码,因为你没有做标签查找。为需要设置的标签创建直接属性。如果标签需要空白,则将nil传递给标签的text属性。

另一个提示是不要做子视图定位tableview:cellForRowAtIndexPath:这可能会有不可预知的结果,而应改为使用tableView:willDisplayCell:forRowAtIndexPath:

顺便说一句,你有几个泄漏与你分配但你没有释放的所有标签。

+0

我需要将'nil'设置为'label'的'text'属性,我在哪里释放它们? 'tableView:willDisplayCell:forRowAtIndexPath:'给出SIGABRT错误。 – GAMA

+0

为我工作。 – GAMA