obtenir des conflits de fusion avec inferredMetricsTieBreakers dans le fichier Storyboard

chaque fois que j'obtiens un conflit dans un dossier de storyboard, je peux habituellement le résoudre. Cependant, j'ai un problème qui est maintenant venu deux fois en deux semaines.

tout en bas de mon fichier Storyboard, je vois un bloc nommé "inferredMetricsTieBreakers", avec un tas de tags "segue" contenus à l'intérieur. Il semble que certains segments de mon repo local soient en conflit avec d'autres segments du repo distant. Pour être sûr, je pourrais juste "choisir". Mais comme c'est arrivé une fois, j'ai peur que ça arrive. continuez, et vous aurez finalement une longue liste de ces références à la fin de mon storyboard.

je me demande juste si quelqu'un est si intimement au courant de ces étiquettes dans le dossier, ou si je devrais simplement continuer aveuglément à "choisir les deux" et ignorer la question.

Merci, -Dan.

39
demandé sur Dan Morrow 2012-10-08 18:09:39

4 réponses

Même chose se passe ici. J'ai eu des erreurs dans mon fichier storyboard après avoir utilisé votre méthode "choose both". La recherche des références de la séquence dans le storyboard a permis de découvrir qu'une séquence était mentionnée à l'intérieur du inferredMetricsTieBreakers section. La suppression de la séquence de la liste a résolu mon problème de construction.

Pour essayer et découvrir ce que ce inferredMetricsTieBreakers en fait, j'ai essayé de la suppression de la section première. La rupture de mon build. Ensuite, j'ai supprimé tous les éléments. Pendant la construction, Xcode a ajouté 2 nouveaux et différents segments à ma liste (avant la fusion j'en avais 3). L'application que je construis fonctionne très bien.

ma conclusion: Il est sûr d'enlever tous les articles et effectuer une construction propre. Ceci gardera votre scénario propre.

35
répondu Rick Pastoor 2018-05-16 22:29:25

chaque contrôleur de vue dans un storyboard a des "mesures simulées" que vous pouvez voir dans les attributs inspector:

enter image description here

certaines de ces mesures sont déduites (donc, mesures déduites).

comme mentionné par @thesystem, si un contrôleur de vue donné est la destination de plusieurs segments, il pourrait y avoir des différences entre les mesures simulées des contrôleurs de vue source des segments. Pour remédier à ces différences, IB choisit une séquence à briser la tie lors de la résolution des mesures inférées pour le contrôleur de la vue de destination.

la conclusion de@rick-pastoor qu'il est sûr d'enlever la totalité inferredMetricsTieBreakers section est correcte en ce que IB peut juste choisir différents segments de rupture de cravate. Toutefois, rien ne garantit que les nouveaux disjoncteurs donneront les mêmes résultats en IB.*

par exemple, j'ai eu une situation dans laquelle, selon la séquence de rupture d'égalité, un contrôleur de vue était affiché en IB avec ou sans une barre d'état. Sa vue maintenait une hauteur de 568 pts dans les deux cas, de sorte que la position du guide de mise en page supérieur changeait constamment. Cela a entraîné d'autres changements non souhaités (et en grande partie sans signification) dans les cadres des vues limitées au Guide de mise en page du haut.

en se basant sur ces observations, il n'est pas conseillé de choisir à la fois les nouveaux et les anciens ensembles de mesures déduites. Au lieu de cela, retirez les deux ensembles et ouvrez le storyboard en IB pour permettre aux liens d'être brisés avant de commettre la fusion. Pour éviter les changements de trame indésirables dus à un changement dans la séquence de rupture des liens, choisissez une valeur autre que "inférée" pour les mesures simulées pertinentes du contrôleur de vue de destination. Cela permettra au Bureau international d'obtenir un résultat cohérent en ce qui concerne la présentation.

* les résultats à l'exécution devraient être les mêmes à moins qu'il n'y ait une logique qui s'appuie sur la disposition initiale immédiatement après que la vue ne soit pas reçue.

54
répondu Andrew Hershberger 2014-08-27 13:52:07

il semble que les tie breaks se produisent lorsque, dans le storyboard, un contrôleur de vue est connecté à partir de deux ou plusieurs autres contrôleurs de vue via segues et que son paramètre de métrique simulé est défini à "inféré" mais Xcode ne peut pas s'assurer que inféré signifie exactement un paramètre de métrique (paysage ou portrait) dans chaque cas.

Je l'ai corrigé en changeant tous les contrôleurs de mesures simulées en "inférés" et toutes les mesures sont inférées à partir d'un contrôleur qui a fixé le paramètre de mesures simulées "paysage." Par la suite, j'ai retiré les disjoncteurs de la section (mais pas la section elle-même).

2
répondu thesystem 2014-07-11 09:26:38

a modifié les mesures de inféré à Freeform (Xcode 8, Swift 3). Résolu mon problème.

0
répondu Florin Odagiu 2018-05-16 22:29:36