2010-10-15 4 views
0

J'ai une UITableView qui utilise JSON pour obtenir de nouvelles données de l'AppDelegate. Il enregistre les données, puis est tiré dans cette classe de vue de table à partir de AppDelegate.data3. Après avoir ajouté un enregistrement à la base de données mysql, je lance la méthode Delegate qui actualise les données.Actualisation de vue de table dans la vue parente après la sélection de l'enfant à l'aide des données de rechargement

Cependant, [self.tableview reLoadData]; interrompt la capacité d'exploration de la table, Si je sélectionne la ligne, il pousse l'affichage enfant pendant une fraction de seconde et l'actualise l'écran avec les lignes parentales. Si je supprime le [self.tableview reLoadData]; Le parent pousse à l'enfant mais je n'obtiens pas un écran rafraîchi avec les nouvelles données.

Des idées?

-(void) loadData3;{ 

    //Initialize table data source 
    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"]; 

} 
    - (void)viewDidLoad { 
    [super viewDidLoad]; 
    if(CurrentLevel3 == 0) { 
     self.navigationItem.title = @"Parent Table"; 
    } 
    else 
     self.navigationItem.title = CurrentTitle3; 
    } 
} 
- (void)viewDidAppear:(BOOL)animated { 
     [self loadData3]; 
     [self.tableview reloadData]; 
      [super viewDidAppear:animated]; 
     } 
+1

peut essayer d'appeler [super viewDidAppear: animé] avant [self loadData3] – Intentss

+0

Je ne sais pas si cela va réparer quelque chose, mais j'ai utilisé 'viewWillAppear:' au lieu de 'viewDidAppear:' pour ce genre de chose . – Nimrod

+0

@ Ben, n'a pas fonctionné –

Répondre

0

Il existe plusieurs problèmes. Ce n'est pas clair ce que vous essayez de faire.

Vous définissez self.tableDataSource3 sur tempArray, puis définissez-le sur [AppDelegate.data3 ....];

Pourquoi?

 NSArray *tempArray = [[NSArray alloc] init]; 
    self.tableDataSource3 = tempArray; 
     [tempArray release]; 
    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"]; 

Au démarrage [selfloadData3] est appelé deux fois. Une fois dans viewDidLoad et viewDidAppear. Inutile. Ne devrait être dans viewWillAppear.

Vous ne sauvegardez pas les données que vous ajoutez, ou vous ne les récupérez pas correctement. Vous devrez peut-être parcourir votre code pour voir si vous obtenez les données que vous devriez obtenir.

+0

ok je vois cette redondance pour le tableau. Je me suis débarrassé de ça. Les données arrivent et se mettent à jour, l'élément que j'ajoute apparaît sur la vue de la table après que l'ajout est envoyé au serveur mysql et il revient à l'application et est sauvegardé. Le problème est que [self.tableview reloaddata] interrompt le processus d'exploration et recharge la vue parent. –

+0

[self.tableView reloadData] ne casse rien. Tout ce qu'il fait est d'appeler la méthode de délégué UITableViews UITableView cellForRowAtIndexPath. Si la vue parent est rechargée, c'est parce que la source de données pour UITableView n'a pas été modifiée. Cela signifie que le tableau que vous chargez avec UITableView n'a pas été modifié ou est vide. Vous devez vous concentrer sur le tableau que vous utilisez pour charger UITableView dans cellForRowAtIndexPath et parcourir les valeurs pour voir si les données sont ce dont vous avez besoin. – Jordan

+0

Je viens d'ajouter un journal coule pour vérifier le self.tabledatasource3 (il est et est mis à jour), dans le processus, j'ai remarqué que ce n'est pas grave si je suis mise à jour les données ou relancer l'application, si le [self tableview .reloadData] est là, le drill down ne fonctionne pas. –

Questions connexes