2015-04-27 1 views
1

J'ai un WKInterfaceTable avec un contrôleur à une rangée. J'utilise le code suivant pour lier les données à la table:WKInterfaceTable affiche les données du storyboard lors de l'ajout de lignes

[self.table setNumberOfRows:[data count] withRowType:@"RowController"]; 
for (int i = 0; i < [data count]; i++) 
{ 
    RowController *row = [self.table rowControllerAtIndex:i]; 
    [row bind:[data objectAtIndex:i]]; // sets labels in the row etc. 
} 

J'ai le même problème si j'ajouter des lignes un par un à l'aide insertRowsAtIndexes:withRowTypes:. Dans les deux cas, vous devez d'abord ajouter une ligne à la table avant de pouvoir mettre à jour la ligne pour afficher les données correctes.

Le premier problème est que, pour cette raison, l'utilisateur peut voir les données du storyboard fictif entre la ligne ajoutée et les données qui lui sont liées.

J'ai essayé

  • cacher le groupe contenant la table jusqu'à ce que la boucle est terminée, mais le premier élément de table sur la première charge finit comme si elle était liée entièrement à nil (même si elle ISN « t) (someone else has seen this)
  • cachant le groupe contenant le contenu de chaque rang jusqu'à ce que le groupe est terminé, mais le rouleau gère ce mal et les rangées pop en mal
  • poussant la table en vue d'un autre groupe jusqu'à ce que la boucle est terminé, mais vous pouvez toujours faire défiler jusqu'à

Est-il vraiment pas façon de rendre une ligne de table avant l'afficher à l'utilisateur?

+0

Votre méthode 'bind' prend-elle du temps de manière asynchrone? –

+0

Non, tout le travail asynchrone prend du temps avant le 'bind' ... Est-ce un problème? – Rawling

+0

Non c'est une bonne chose. Quelle méthode avez-vous implémenté? init ou awakeWithContext? –

Répondre

3

J'ai eu un problème similaire, qui a été résolu en envoyant un travail sur le thread principal.

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.table setNumberOfRows:[data count] withRowType:@"RowController"]; 
    for (int i = 0; i < [data count]; i++) 
    { 
     RowController *row = [self.table rowControllerAtIndex:i]; 
     [row bind:[data objectAtIndex:i]]; // sets labels in the row etc. 
    } 
}); 
+0

Salut Matthew, merci pour la réponse; Malheureusement, nous avons expédié et je n'ai plus de montre avec laquelle travailler, donc je ne peux pas l'essayer! Mais je vais certainement essayer (ou passer le mot) la prochaine fois que nous travaillons sur l'application, et j'espère que cette réponse pourrait aider quelqu'un d'autre avec le même problème. – Rawling

+1

Pour ceux qui se demandent: j'ai testé cela, et cela fonctionne parfaitement. Merci Matt! –