2010-01-08 7 views
1

J'ai une application tabBar qui a ResultsNavController comme 1 du contrôleur de navigation de mon tabBar, le View Controller est ResultsViewController et mon tableViewPtr est connecté à la tableView dans IB qui est sous Main window.xib ResultsNavController/ResultsViewController/Voir/tableView. Après avoir accédé à un autre onglet pour écrire dans PureFun.plist, cliquer sur l'affichage des résultats ne recharge pas la table instantanément avec le nouveau PureFun.plist. PureFun.plist a été écrit avec succès après avoir vérifié.UITableView reloadData problème dans UITabBar

- (void)viewWillAppear:(BOOL)animated { 
    [self.tableViewPtr reloadData]; 

} 
#pragma mark Table view methods 

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


    // Customize the number of rows in the table view. 
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
     return [resultsDataArray count]; 
    } 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     static NSString *CellIdentifier = @"ResultsCellIdentifier"; 
     UILabel *scoreStrLabel; 
     UILabel *dateStrLabel; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 

      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:CellIdentifier] autorelease]; 
      dateStrLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10,5.0,200,43)] autorelease]; 
      dateStrLabel.tag = DATESTR_TAG; 
      dateStrLabel.font = [UIFont systemFontOfSize:18.0]; 
      dateStrLabel.textAlignment = UITextAlignmentLeft; 
      dateStrLabel.textColor = [UIColor blackColor]; 
      [cell.contentView addSubview:dateStrLabel]; 
      scoreStrLabel = [[[UILabel alloc] initWithFrame:CGRectMake(250,5.0,50,43)] autorelease]; 
      scoreStrLabel.tag = SCORESTR_TAG; 
      scoreStrLabel.font = [UIFont systemFontOfSize:18.0]; 
      scoreStrLabel.textAlignment = UITextAlignmentRight; 
      scoreStrLabel.textColor = [UIColor blackColor]; 
      [cell.contentView addSubview:scoreStrLabel]; 




     } 
     else { 
      scoreStrLabel = (UILabel *)[cell.contentView viewWithTag:SCORESTR_TAG]; 
      dateStrLabel = (UILabel *)[cell.contentView viewWithTag:DATESTR_TAG]; 

     } 
     NSDictionary *dict = [resultsDataArray objectAtIndex:indexPath.row]; 
     NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
     [formatter setDateFormat:@"h':'mma, EEE d MMM"]; 
     NSDate *dateTested = [dict objectForKey:@"Date"]; 
     NSString *dateStr = [formatter stringFromDate:dateTested]; 
     NSString *scoreStr = [dict objectForKey:@"Score"]; 
     scoreStrLabel.text = scoreStr; 
     dateStrLabel.text = dateStr; 
     return cell; 

    } 

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
     return 49.1; 
    } 
- (void)viewDidLoad { 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:@"PureFun.plist"]; 
     NSArray *array = [[NSArray alloc] initWithContentsOfFile:myPathDocs]; 
     self.resultsDataArray = array; 
     [array release]; 

     [super viewDidLoad]; 
    } 

Répondre

0

Je connais mon problème. mon tableau n'a pas été rechargé dans viewWillAppear, j'ai donc copié les codes d'installation dans viewDidLoad pour voirWillAppear et cela l'a résolu. D'un autre côté, le problème UItableView peut résulter de la configuration des données dans DataSource, et [reload Data] n'est peut-être pas le principal responsable de l'incident.

0

Pour attraper les changements du contrôleur de vue en cours dans votre UITabBarController, essayez d'utiliser la méthode UITabBarControllerDelegate suivante:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    // ... 
} 

De cette façon, vous pouvez déclencher manuellement le rechargement. Parfois, des combinaisons complexes de contrôleurs de vue peuvent devenir complexes et difficiles à déboguer, et toutes les méthodes "viewWillAppear:" ne sont pas appelées comme on le pense.

+0

où est-ce que j'ajoute ceci? dans mon RootViewController? Je n'ai qu'un tableauView Outlet dans IB sous mon onglet Résultats. est-il un moyen de déboguer? – zerlphr

Questions connexes