Подтвердить что ты не робот

Получение конфликтов слияния с inferredMetricsTieBreakers в файле раскадровки

Всякий раз, когда я получаю конфликт в файле раскадровки, я обычно могу его разрешить. Тем не менее, у меня есть проблема, которая появилась дважды за две недели.

В самом низу моего файла Storyboard я вижу блок с именем "inferredMetricsTieBreakers" с кучей тегов "segue", содержащихся внутри. Кажется, что некоторые segue в моем локальном репо конфликтуют с другим segue в удаленном репо. Чтобы быть в безопасности, я мог просто "выбрать оба". Но так как это произошло раньше, я боюсь, что это будет продолжаться, и, в конце концов, будет длинный список этих ссылок в конце моего файла раскадровки.

Просто интересно, знает ли кто-нибудь о том, что он хорошо осведомлен об этих тегах в файле, или я должен просто слепо продолжать просто "выбирать оба" и игнорировать проблему.

Спасибо, Дан.

4b9b3361

Ответ 1

То же самое происходит здесь. Получил ошибки в моем файле раскадровки после использования вашего метода "выбрать оба". Обнаружено, что поиск раскадровки для ссылок на segue привел к одному сегменту, который упоминался в разделе inferredMetricsTieBreakers. Удаление segue из списка решило мою разбитую сборку.

Чтобы попытаться выяснить, что делает этот inferredMetricsTieBreakers, я сначала попытался удалить весь раздел. Нарушение моей сборки. Затем я удалил все элементы. Во время сборки XCode добавила 2 новых и разных сегмента в мой список (до слияния у меня было 3). Приложение, которое я создаю, работает нормально.

Мой вывод: безопасно удалять все элементы и выполнять чистую сборку. Это будет держать вашу раскадровку чистой.

Ответ 2

Каждый контроллер представления в раскадровке имеет "Имитированные показатели", которые вы можете увидеть в инспекторе атрибутов:

enter image description here

Некоторые из этих показателей выведены (таким образом, выведенные метрики).

Как упоминалось в @thesystem, если данный контроллер представления является местом назначения нескольких сегментов, могут быть различия между имитируемыми метриками контроллеров представления источника в сегментах. Чтобы устранить эти различия, IB выбирает segue для разрыва связи при разрешении выводимых показателей для контроллера представления назначения.

@rick-pastoor заключение о том, что безопасно удалить весь раздел inferredMetricsTieBreakers, является правильным в том, что IB может просто выбрать разные тай-разрывы. Тем не менее, нет никакой гарантии, что новые тай-брейки приведут к тому же макету результатов в IB. *

Например, у меня была ситуация, в которой, в зависимости от таймого разрыва, контроллер просмотра был показан в IB либо с помощью строки состояния, либо без нее. Его вид поддерживал высоту 568 пунктов в обоих случаях, так что положение верхнего руководства по размещению постоянно менялось. Это засветилось в другие нежелательные (и в значительной степени бессмысленные) изменения в рамах представлений, ограниченных верхним руководством по макету.

Исходя из этих наблюдений, выбор как нового, так и старого наборов предполагаемых показателей нецелесообразен. Вместо этого удалите оба набора, а затем откройте раскадровку в IB, чтобы разрешить связывание, прежде чем совершать слияние. Чтобы избежать нежелательных изменений кадра из-за изменения тай-разрыва, выберите другое значение, отличное от "Предполагается" для соответствующих имитируемых показателей контроллера представления адресата. Это гарантирует, что IB генерирует согласованный результат компоновки.

* Результаты во время выполнения должны быть одинаковыми, если не существует какой-либо логики, которая полагается на начальную компоновку сразу же после того, как представление будет разрхивировано.

Ответ 3

Похоже, что выключатели связи встречаются, когда в раскадровке один контроллер просмотра подключается от двух или более других контроллеров представлений через segues, а его смоделированные параметры метрики устанавливаются как "выведенные", но Xcode не может удостовериться, что inferred означает ровно один метрики (пейзаж или портрет) в каждом случае.

Я исправил это, изменив все моделируемые ими показатели на "inferred", и все показатели выведены из контроллера, который имеет фиксированные моделированные параметры, задающие "пейзаж". После этого я удалил идентификаторы segue-выключателя из секции (но не самого раздела).

Ответ 4

Изменены метрики из Inferred в Freeform (Xcode8, Swift3). Решила мою проблему.