web-dev-qa-db-fra.com

obtenir des conflits de fusion avec inferredMetricsTieBreakers dans le fichier Storyboard

Chaque fois que je rencontre un conflit dans un fichier de scénario, je peux généralement le résoudre. Cependant, j'ai un problème qui a été soulevé deux fois en deux semaines.

Tout en bas de mon fichier Storyboard, je vois un bloc nommé "inferredMetricsTieBreakers", contenant un groupe de balises "segue". Il semble que certains segments de mon référent local soient en conflit avec un autre segment du référentiel distant. Pour être en sécurité, je pouvais simplement "choisir les deux". Mais comme cela s'est déjà produit une fois auparavant, je crains que cela ne se reproduise et que la liste de ces références de segue figure à la fin de mon fichier de storyboard.

Je me demandais simplement si quelqu'un connaissait si intimement ces balises dans le fichier, ou si je devais continuer aveuglément à simplement "choisir les deux" et à ignorer le problème.

Merci, Dan.

42
Dan Morrow

Même chose se passe ici. J'ai eu des erreurs dans mon fichier de storyboard après avoir utilisé la méthode "choisir les deux". Nous avons constaté que la recherche dans le story-board des références à la division a abouti à une division mentionnée dans la section inferredMetricsTieBreakers. Le retrait de la liste de la liste a résolu mon casse-tête.

Pour essayer de savoir ce que cette inferredMetricsTieBreakers fait, j'ai d'abord essayé de supprimer toute la section. Briser ma construction. Ensuite, j'ai enlevé tous les objets. Lors de la construction, Xcode a ajouté 2 nouvelles et différentes séquences à ma liste (avant la fusion, j'en avais 3). L'application que je construis fonctionne bien.

Ma conclusion: il est prudent de supprimer tous les éléments et d'effectuer une construction propre. Cela gardera votre storyboard propre.

37
Rick Pastoor

Chaque contrôleur de vue d'un storyboard a des "métriques simulées" que vous pouvez voir dans l'inspecteur d'attributs:

enter image description here

Certaines de ces métriques sont déduites (donc des métriques inférées).

Comme mentionné par @thesystem, si un contrôleur de vue donné est la destination de plusieurs segments, il pourrait exister des différences entre les métriques simulées des contrôleurs de vue source des segments. Pour remédier à ces différences, IB choisit une division pour rompre l’égalité lors de la résolution des mesures inférées pour le contrôleur de vue de destination.

La conclusion de @ rick-pastoor selon laquelle il est prudent de supprimer la totalité de la section inferredMetricsTieBreakers est correcte car IB ne peut que choisir différentes ligues décisives. Cependant, rien ne garantit que les nouveaux bris d'égalité mèneront aux mêmes résultats de mise en page dans IB. *

Par exemple, j'ai eu une situation dans laquelle, en fonction de la division, un contrôleur de vue était affiché dans IB avec ou sans barre de statut. Sa vue conservait une hauteur de 568 points dans les deux cas, de sorte que la position du guide de disposition supérieur continuait à changer. Cette boule de neige a entraîné d'autres modifications non désirées (et en grande partie dépourvues de sens) dans les cadres de vues limités au guide de disposition supérieur.

Sur la base de ces observations, il est déconseillé de choisir à la fois les nouveaux et les anciens ensembles de métriques inférées. Supprimez plutôt les deux jeux, puis ouvrez le storyboard dans IB pour permettre la rupture des liens avant la fusion. Pour éviter les modifications de trame non souhaitées dues à une modification de la division, choisissez une valeur autre que "Inférée" pour les métriques simulées pertinentes du contrôleur de vue de destination. Cela garantira que IB génère un résultat de mise en page cohérent.

* Les résultats au moment de l'exécution doivent être identiques, sauf en cas de logique reposant sur la présentation initiale immédiatement après la désarchivage de la vue.

59
Andrew Hershberger

Il semble que les séparateurs se produisent lorsque, dans le storyboard, un contrôleur de vue est connecté à partir de deux autres contrôleurs de vue via Segues et que son paramètre de métriques simulées est défini sur "inféré" mais que Xcode ne peut pas garantir que ce dernier signifie exactement un paramètre de métrique ( paysage ou portrait) dans tous les cas.

Je l'ai corrigé en remplaçant toutes les métriques simulées du contrôleur par "inférées" et toutes les métriques sont déduites d'un contrôleur qui a fixé le paramètre de métrique simulé "paysage". Après cela, j'ai enlevé les identifiants de division de la section (mais pas la section elle-même).

2
thesystem

Changé les métriques d'Inferred à Freeform (Xcode 8, Swift 3). Résolu mon problème.

0
Florin Odagiu