197 votes

Quand utiliser la table de montage séquentiel et quand utiliser XIBs

Existe-t-il des lignes directrices sur le moment d’utiliser des tables de montage séquentiel dans un projet d’iOS et quand utiliser XIBs ? Quels sont les avantages et inconvénients de chaque et quelles situations ont-ils chaque couleur ?

Près que je peux dire que ce n’est pas que nettoyer l’utilisation table de montage séquentiel enchaîne quand vous avez vue contrôleurs poussés par des éléments d’interface utilisateur dynamiques (comme la carte de broches).

224voto

Johannes Fahrenkrug Points 12795

Mise à jour 6/10/2014: Comme prévu, Apple ne cesse de s'améliorer Storyboards et Xcode. Certains des points qui s'appliquait à iOS 7 et ci-dessous ne s'appliquent pas à iOS 8 (et sont maintenant marquées comme telles). Ainsi, alors que les Storyboards intrinsèquement encore avoir des défauts, je révise mon avis de ne pas utiliser d' utiliser sélectivement où il fait sens.

Même maintenant, alors qu'iOS 7 est sorti, je vous conseille l'encontre de faire preuve de prudence lorsque vous décidez d'utiliser des story-boards. Voici mes raisons:

  • Storyboards échouer au moment de l'exécution, et non pas au moment de la compilation: Vous avez une faute de frappe dans un segue nom ou connecté, il est mal dans votre storyboard? Il va exploser lors de l'exécution. Vous utilisez un personnalisé UIViewController sous-classe qui n'existe plus dans votre scénario? Il va exploser lors de l'exécution. Si vous faire de telles choses dans le code, vous pourrez attraper dès le début, lors de la compilation. Mise à jour: Mon nouvel outil StoryboardLint surtout résout ce problème.

  • Les Storyboards de la confusion rapide: en tant Que votre projet se développe, votre scénario devient de plus en plus difficile de naviguer. En outre, si plusieurs contrôleurs de vue ont de multiples enchaîne à de multiples autres contrôleurs de vue, votre storyboard rapidement commence à ressembler à un plat de spaghetti et vous trouverez vous-même de zoomer et faire défiler pour trouver le point de vue du contrôleur que vous cherchez et pour savoir ce que segue points où. Mise à jour: Ce problème peut généralement être résolu par la division de votre Storyboard en plusieurs story-boards, comme décrit dans cet article par Pilky et cet article par Robert Brown.

  • Les Storyboards de rendre le travail dans une équipe plus difficile: Parce que vous habituellement seulement un énorme storyboard de fichier pour votre projet, le fait d'avoir plusieurs développeurs régulièrement apporter des modifications à un fichier peut être un casse-tête: des Changements doivent être fusionnés et résoudre les conflits. Lorsqu'un conflit survient, il est difficile de dire comment le résoudre: Xcode génère le storyboard fichier XML et il n'a pas vraiment été conçu avec l'objectif à l'esprit qu'un homme devrait lire, et encore moins de le modifier.

  • Storyboards de faire des revues de code difficile ou presque impossible: par les Pairs des revues de code sont une grande chose à faire sur votre équipe. Toutefois, lorsque vous apportez des modifications à un plan de montage, il est presque impossible de passer en revue ces changements avec un autre développeur. Tout ce que vous pouvez tirer vers le haut est un diff d'un énorme fichier XML. Le déchiffrage de ce qui a vraiment changé, et si ces modifications sont correctes ou si quelque chose s'était cassé est vraiment dur.

  • Storyboards entraver la réutilisation du code: Dans mon iOS projets, j'ai l'habitude de créer une classe qui contient toutes les couleurs et les polices et les marges et les encarts que j'utilise tout au long de l'app pour lui donner une apparence cohérente: C'est un changement de ligne si je dois modifier ces valeurs pour l'ensemble de l'application. Si vous définissez ces valeurs dans la table de montage séquentiel, vous dupliquez les et aura besoin de trouver chaque occurrence lorsque vous souhaitez modifier. Les Chances sont élevées que vous en oubliez un, car il n'y a pas de recherche et de remplacement dans les storyboards.

  • Storyboards de vous faire faire tout deux fois: vous construisez une application universelle qui fonctionne à la fois sur iPad et sur l'iPhone? Lorsque vous utilisez des story-boards, vous aurez généralement un storyboard pour la version iPad et un pour la version iPhone. Garder en synchronisation vous oblige à faire tous les de l'INTERFACE utilisateur ou de l'application,-flux de travail changent en deux endroits. Yay. Mise à jour: Dans iOS 8 et Xcode 6, vous pouvez utiliser une seule table de montage séquentiel pour l'iPhone et l'iPad.

  • Storyboards besoin constant de changements de contexte: je me trouve et de navigation beaucoup plus rapide dans le code que dans les storyboards. Lorsque votre application utilise les storyboards, vous passer constamment de votre contexte: "Oh, je veux appuyer sur cette vue de la table de la cellule de chargement d'un point de vue différent du contrôleur. J'ai maintenant d'ouvrir la table de montage séquentiel, trouvez le bon-vue-contrôleur, de créer une nouvelle séquence à l'autre-vue-contrôleur (que j'ai aussi à trouver), donner l'enchaîner un nom, souvenez-vous de ce nom (je ne peux pas utiliser des constantes ou des variables dans les storyboards), revenir à code et j'espère que je ne pas confondre le nom de cette transition pour ma méthode prepareForSegue. Comment je souhaite que je pourrais juste taper ces 3 lignes de code là où je suis!" Non, il n'est pas amusant. La commutation entre le code et le storyboard (et entre le clavier et la souris) vieillit vite et vous ralentit.

  • Les story-boards sont difficiles à refactoriser: Lorsque vous effectuez un refactoring de code, vous devez vous assurer qu'il est toujours conforme à ce que votre storyboard attend. Lorsque vous déplacez les choses dans votre scénario, vous ne trouverez qu'à l'exécution si elle fonctionne encore avec votre code. Il me semble que si je dois les garder deux mondes synchronisés. Il se sent fragile et décourage les modifier, à mon humble avis.

  • Des story-boards ne sont pas consultables: Un projet de recherche à l'échelle dans Xcode n'est pas vraiment un projet de recherche à l'échelle lorsque vous utilisez des story-boards. Ils ne sont pas inclus dans la recherche. Ainsi, lorsque vous supprimez une classe personnalisée à partir de votre code ou le renommer, vous aurez à aller manuellement par le biais de la table de montage ou de regarder ses premières XML pour s'assurer qu'il est sur le pair avec votre code de changements. Non monsieur, je ne l'aime pas. Mise à jour: les story-boards sont consultables dans Xcode 6.

  • Les story-boards sont de moins en moins flexibles: Dans le code, vous pouvez faire ce que vous voulez! Avec les storyboards vous êtes limité à un sous-ensemble de ce que vous pouvez faire dans le code. Surtout quand tu veux faire avancé les choses, avec des animations et des transitions, vous trouverez vous-même "la lutte contre la table de montage séquentiel" pour le faire fonctionner.

  • Les Storyboards de ne pas vous permettre de changer le type de vue des contrôleurs: Vous souhaitez changer un UITableViewController en UICollectionViewController? Ou dans une plaine UIViewController? Pas possible dans un Storyboard. Vous devez supprimer l'ancienne-vue-contrôleur et en créer un nouveau et re-connecter tous les enchaîne. Il est beaucoup plus facile de faire un tel changement dans le code.

  • Storyboards ajouter deux autres passifs à votre projet: (1) Le Storyboard de l'Éditeur de l'outil qui génère le storyboard XML et (2) le composant d'exécution qui parse le XML et crée de l'INTERFACE utilisateur et le contrôleur des objets à partir d'elle. Les deux parties peuvent avoir des bugs que vous ne pouvez pas corriger.

  • Storyboards ne vous permet pas d'ajouter une sous-vue à un UIImageView: Qui sait pourquoi.

  • Storyboards ne permettent pas d'activer la fonction d'Auto Mise en page pour l'individu (Vue-Contrôleur)s: En cochant/décochant la Mise en page Automatique option dans un Storyboard, la modification est appliquée à TOUS les contrôleurs dans le Storyboard. (Merci à Sava Mazăre pour ce point!)

  • Scénarios ont un risque plus élevé de rupture de rétro-compatibilité: Xcode change parfois le Storyboard format de fichier et ne garantit en aucune façon que vous serez en mesure d'ouvrir Storyboard fichiers que vous créez aujourd'hui, quelques mois ou les années à partir de maintenant. (Merci à thoughtadvances pour ce point. Voir le commentaire d'origine)

  • C'est Mcdonald's: pour le dire À Steve Jobs mots à propos de Microsoft: C'est Mcdonald's (vidéo)!

Ce sont mes raisons pour lesquelles je n'aime pas vraiment travailler avec des story-boards. Certaines de ces raisons s'appliquent aussi à XIBs. Sur la table de montage séquentiel basé sur les projets que j'ai travaillé, ils ont m'a coûté beaucoup plus de temps qu'ils ont sauvé et ils ont fait les choses plus compliquées au lieu de plus facile.

Quand j'ai créer mon INTERFACE utilisateur et de l'application de flux dans le code, je suis beaucoup plus en contrôle de ce qui se passe, c'est plus facile à déboguer, il est plus facile de détecter des erreurs au début, il est plus facile d'expliquer les modifications que j'ai apportées à d'autres développeurs et il est plus facile de soutenir l'iPhone et l'iPad.

Cependant, je suis d'accord que la pose de tous les éléments de votre INTERFACE dans code peut ne pas être un one-size-fits-all solution pour chaque projet. Si votre iPad de l'INTERFACE utilisateur diffère grandement de votre INTERFACE iPhone dans certains endroits, il pourrait être judicieux de créer un XIB juste pour ces zones.

Beaucoup de les problèmes décrits ci-dessus pourrait être corrigé par Apple et j'espère que c'est ce qu'ils vont faire.

Juste mes deux cents.

Mise à jour: Dans Xcode 5, Apple a enlevé la possibilité de créer un projet sans un Storyboard. J'ai écrit un petit script qui les ports Xcode 4 modèles (avec Storyboard-opt-out option) pour Xcode 5: https://github.com/jfahrenkrug/Xcode4templates

175voto

henning77 Points 2263

J'ai utilisé XIBs largement et a réalisé deux projets à l'aide des story-boards. Mes enseignements sont les suivants:

  • Les Storyboards sont sympas pour les applications avec un petit nombre moyen d'écrans et relativement simple de navigation entre les vues.
  • Si vous avez beaucoup de points de vue et beaucoup de croix-navigation entre eux la vue Storyboard devient confus et trop de travail pour les garder propres.
  • Pour un projet d'envergure avec plusieurs développeurs, je ne voudrais pas utiliser des story-boards, car vous avez un seul fichier pour votre INTERFACE utilisateur et ne peuvent pas facilement travailler en parallèle.
  • Il pourrait être intéressant pour les grandes applications de se diviser en plusieurs storyboard fichiers mais je n'ai pas essayé. Cette réponse montre comment faire enchaîne entre les storyboards.
  • Vous avez encore besoin de XIBs: Dans les deux de mon Storyboard projets que j'ai eu à utiliser XIBs pour personnalisé les cellules d'un tableau.

Je pense que les story-boards sont un pas dans la bonne direction pour l'INTERFACE utilisateur de mise en œuvre et à espérer qu'Apple va s'étendre dans les prochaines versions iOS. Ils ont besoin pour résoudre le "dossier unique" problème bien que, sinon ils ne seraient pas intéressants pour les grands projets.

Si je commence une petite taille de l'application et peut se permettre d'iOS5, seule la compatibilité, je voudrais utiliser des story-boards. Pour tous les autres cas, je m'en tiens à XIBs.

17voto

Bot Points 7046

Storyboards ont été créés pour aider les développeurs à visualiser leur application et le flux de l'application. C'est beaucoup que d'avoir un tas de xib, mais dans un seul fichier.

Il y a une question similaire à ce situé Quelle est la différence entre un .xib fichier et un .storyboard?.

Vous pouvez également créer des transitions personnalisées via le code qui va changer de manière dynamique si nécessaire, un peu comme vous avec .xibs.

POUR:

  • Vous pouvez créer un modèle de flux d'une application sans avoir à écrire beaucoup, si aucun code.
  • Beaucoup plus facile de voir les transitions entre les écrans et vos flux d'application.
  • Pouvez également utiliser .xibs si besoin est, avec des story-boards.

INCONVÉNIENTS:

  • Fonctionne uniquement avec iOS 5+. Ne fonctionne pas avec la version iOS4.
  • Pouvez obtenir encombré facilement si vous avez une vue très intensif de l'application.

Il n'est pas vraiment bon / mauvais quand utiliser l'un ou l'autre, c'est juste une question de préférence et de ce que les versions d'iOS que vous souhaitez utiliser.

5voto

Stefano Mondino Points 729

Je ne pense pas qu'il existe un droit de réponse pour votre question, c'est juste une question d'expérience personnelle et ce que vous vous sentez le plus à l'aise avec.

À mon avis, les story-boards sont une bonne chose. C'est vrai, il est vraiment difficile de savoir pourquoi votre application est misteriously s'écraser au moment de l'exécution, mais après un certain temps et l'expérience, vous vous rendrez compte qu'il est toujours lié à certains IBOutlet manquant quelque part et vous serez facilement en mesure de le réparer.

La seule vraie question est de travailler en équipe sous contrôle de version avec les storyboards, dans les premiers stades de développement, il pourrait être un vrai bordel. Mais après cette première étape, l'INTERFACE utilisateur des mises à jour qui change complètement la table de montage séquentiel sont très rares, et dans la plupart des cas, vous vous retrouvez avec des conflits dans la toute dernière partie du xml, qui sont des enchaînements de références qui, généralement, autofix eux-mêmes lorsque vous ré-ouvrez la table de montage séquentiel. Dans notre équipe de travail, nous avons préféré traiter cela au lieu de lourdes vue-contrôleurs avec des tonnes de vue du code.

J'ai lu beaucoup de commentaires contre l'auto-layout. Avec XCode5 elle s'est vraiment améliorée, Il est vraiment bon, même pour autorotating mises en page. Dans certains cas, vous aurez à faire quelque chose dans le code, mais vous pouvez tout simplement sortie de la contrainte, vous devez modifier et, à ce stade, de faire ce que vous avez besoin dans votre code. Même de les animer.

Je pense aussi que la plupart des gens qui n'aiment pas les story-boards n'ont pas tout à essayer de comprendre la puissance d'un manuel de transition, où vous pouvez totalement le personnaliser (dans un seul fichier) le moyen de transition d'un mode à l'autre et également (avec quelques astuces), même réutiliser un préalablement chargé en-vue-contrôleur par juste de le mettre à jour l'affichage du contenu au lieu de recharger entièrement la totalité de la chose. À la fin, vous pouvez vraiment faire les mêmes choses que dans le code, mais je pense que vous avez une meilleure séparation des préoccupations, avec des storyboards, mais je suis d'accord que dans beaucoup de choses, ils le manque de fonctionnalités (polices, image en tant qu'arrière-plan de couleur, ecc...).

1voto

haawa Points 903

Il y a une bonne discussion des gars de raywenderlich.com, appelée "Storyboards vs NIB vs Code: Le grand débat!"
voici le lien: http://www.raywenderlich.com/51992/storyboards-vs-nibs-vs-code-the-great-debate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X