Хотя эта ветка устарела, я не видел ответа, описывающего, что у меня сработало, так что вот ...
У меня была эта ошибка, и визуальный осмотр раскадровки показал, что все контроллеры представлений были подключены к корневому контроллеру представления.
Я попытался назвать все 17 контроллеров представления в раскадровке (как в ответе @bobnoble). Я использовал соглашение об именах, основанное на длинном имени контроллера представления, например «jvc» для «Контроллер представления заданий». Когда я попытался построить, я получил сообщение об ошибке, указывающее на то, что один из контроллеров представления имеет повторяющееся имя. Отслеживая вещи, я обнаружил, что у меня есть фактическая копия контроллера представления, расположенная точно поверх его двойника. Я подозреваю, что это было повреждение методом вырезания и вставки в результате эксперимента с пользовательским интерфейсом, от которого я не отказался полностью.
В любом случае, удаление неподключенного близнеца решило мою проблему. После этого я удалил все имена VC, поскольку они не упоминаются в коде.
Storyboard ID
В раскадровке выберите каждый из контроллеров представления (красная стрелка на изображении ниже) и посмотрите на поле идентификатора раскадровки (красный овал). Ни одно из полей идентификатора раскадровки не должно быть пустым. Когда вы найдете то, что есть, это виноват.
источник
Storyboard ID
UINavigationController
несколько,UIViewControllers
и мне пришлось установить идентификатор для всех, даже я никогда не называю ни одного из них по идентификатору. Действительно раздражает, ищу баг там, где никого нет!У меня была именно эта ошибка с простой раскадровкой с одной сценой, и все, что мне нужно было сделать, чтобы исправить это, - это установить флажок «Is Initial View Controller» для 1 контроллера представления в Storyboard. Я подозреваю, что в этой ситуации Xcode по умолчанию ставил для вас этот флажок, но больше не делает этого.
Установите флажок только для одного из контроллеров представления в раскадровке, и все будет хорошо.
источник
Боюсь, вам придется пройти через все 30 из них и проверить, есть ли у них идентификатор раскадровки или переход к этому контроллеру представления. Один из двух обязателен, оба тоже возможны.
источник
Эта проблема может возникнуть в одном из следующих сценариев:
Случай I. Если ни одна сцена в раскадровке не помечена как isInitialViewController .
Исправление: Определите корневой контроллер представления и пометьте его как «isInitialViewController» в вашем SB. В этом случае идентификатор раскадровки не является обязательным.
Дело II
Могут возникнуть ситуации, когда вам не нужно иметь initialViewController в раскадровке. Например: при использовании нескольких раскадровок.
Исправление: в таких случаях убедитесь, что «идентификатор раскадровки» указан правильно и вы ссылаетесь на первую сцену, которая будет использоваться в раскадровке, используя этот идентификатор. Например:
UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil]; MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];
В этом случае "идентификатор раскадровки" является обязательным.
Дело III
Ваш initialViewController подключен. Но все же вы получаете это предупреждение. Это связано с тем, что некоторые сцены в раскадровке могут не быть связаны с «переходом», а также у них нет «идентификатора раскадровки» . Просмотрите свою раскадровку, посмотрите, нужен ли «переход» . Подключите переходник, если он отсутствует. Если переход не требуется, убедитесь, что вам нужно указать «идентификатор раскадровки», поскольку это единственный способ ссылаться на сцену из вашего кода, как показано в примере кода выше.
Надеюсь это поможет
источник
Вам не нужно устанавливать
Storyboard ID
для всех сцен илиUINavigationController
Что ж, у меня около 50-60 сцен, и я только что получил это предупреждение, чтобы понять, что нужно установить только контроллер (сцена) или NavigationController, который не связан с segue
Storyboard ID
.Вы можете видеть, что изображение выше
UINavigationController
не связано с segue, оно было виновником этого предупреждения.Просто дайте ему идентификатор раскадровки, чтобы удалить это предупреждение.
источник
Я была такая же проблема. У меня много просмотров на моей раскадровке с помощью контроллера навигации и панели вкладок. Для меня это было просто предупреждением, чтобы вы знали, что некоторые виды не связаны. Убедитесь, что все ваши представления каким-то образом связаны с корневым контроллером представления . Я начинал этот проект с нуля, чтобы устранить это предупреждение, и заметил такое же предупреждение, когда представление не было подключено.
источник
Самый простой способ найти место нарушения:
Перейдите в навигатор задач (на левой панели, рядом с кнопкой поиска) и дважды щелкните ошибку. Появится всплывающее окно, содержащее сцену с нарушением правил в центре окна.
(На самом деле это действительно так - двойной щелчок по любой ошибке обычно приводит к появлению всплывающего окна, содержащего ошибку по центру - аккуратный маленький трюк!)
Боковое примечание: иногда XCode неверно выдает эту ошибку для сцены, которая является корневым контроллером представления контроллера навигации (то есть начальным контроллером представления). Простое исправление - присвоение этому корневому контроллеру представления идентификатора раскадровки, компиляция (ошибка должна исчезнуть), а затем удаление идентификатора раскадровки (ошибки больше нет).
источник
Самый простой способ узнать, какой контроллер или сцена вызывает эту проблему:
.storyboard
в Project Navigator и выберитеOpen As > Source Code
. Это вызовет основной XML раскадровки.В моем случае предупреждение было особенно раздражающим, потому что у «сцены нарушения» был идентификатор и переход! Я смог решить проблему, удалив сцену, а затем отменив удаление. Не изящно, но работало. Перед этим я сохранил свою раскадровку. Оглядываясь назад, я должен был сделать копию и сделать
diff
до и после.источник
Source Code
просмотр не показывает ошибку. Так что пробег может отличаться.Для меня это было не из-за a
Storyboard ID
или aSegue
. Я получил это предупреждение, потому что не установилView Controller's Custom Class
.Выберите
View Controller
наStoryboard
, затем вUtilities Pane
, выберитеIdentity Inspector
значок. ПодCustom Class
, увидеть , какое значение находится внутриClass
поля.Если он просто говорит
UIViewController
, вам нужно ввести имя класса. Это будет имя вашего.h
и.m
файлов, составляющих пользовательскийUIViewController
подкласс.источник
Я пришел к этому вопросу сегодня. Я использую Xcode 6.3, и теперь ответ на вопрос OP довольно прост:
Выберите контроллер представления, который вы хотите сделать первым, покажите инспектор атрибутов и в разделе «Контроллер представления» убедитесь, что
Начальный контроллер представления
проверено. Вуаля!
источник
С Xcode 7 с этим легко справиться. Нет необходимости вручную просматривать все сцены, чтобы найти проблемную. Сначала перейдите в навигатор отчетов , где вы можете получить более подробную информацию об известных проблемах. Описание проблемы может выглядеть так:
Base.lproj / Main.storyboard: fPh-fe-F5F : предупреждение: сцена недоступна из-за отсутствия точек входа и не имеет идентификатора для доступа во время выполнения через -instantiateViewControllerWithIdentifier :.
С помощью этой информации вы можете скопировать идентификатор объекта, в данном случае это был fPh-fe-F5F , и выполнить поиск в рабочей области для появления этой строки. Строка будет найдена в файле Main.storyboard. Дважды щелкните результат поиска, и откроется Main.storyboard с выбранной сценой. Как только вы узнаете проблемную сцену, вы можете легко решить проблему, установив идентификатор раскадровки или установив "Is Initial View Controller"
источник
Вы можете просто установить идентификатор. В инспекторе атрибутов на правой панели вы найдете поле под названием «Идентификатор». Просто вставьте туда любую строку, это должно сработать
Вы можете щелкнуть контроллер навигации и в инспекторе атрибутов нажать кнопку «это начальный контроллер представления», и это тоже должно работать.
источник
Я столкнулся с той же проблемой и решил, что для идентификатора раскадровки любой идентификатор для всех viewController и NavigationController также; ошибка будет немедленно удалена
наслаждаться!!!
источник
Возможно, этот XQuery поможет вам найти эти неприятные сцены
for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id (: find every scene that has an empty storyboardIdentifier :) where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) return ($i, $i/../@customClass) (: return the storyboard-id and the customClass, if any :)
Если у вас установлена xqilla, вы должны сохранить запрос в файл и использовать его как
xqilla <xqueryfile> -i <path to your storyboard>
источник
Я не знаю, не упоминалось ли об этом еще или нет, но еще одна причина, по которой вы можете получить это предупреждение, - это если ваш переход идет в неправильном направлении. Например, в моем проекте я получал это предупреждение, но все мои контроллеры фактически были подключены. Однако у одного из них был переход, который в основном пытался представить родителя от ребенка вместо того, чтобы родитель представлял ребенка. Это вызвало такое же предупреждение.
источник
Я получил это предупреждение, когда у меня есть UIViewController в Storyboard, для которого ничего не установлено. Я избежал этого предупреждения, установив для него идентификатор раскадровки.
источник
У меня была такая же проблема, но я понял, что использую представление контейнера, и вместо удаления контроллера представления по умолчанию я удалил его переход. Таким образом, контроллер представления остался в раскадровке, как и предупреждение. Таким образом, это один из случаев, когда появляется предупреждение, если контроллер представления по умолчанию для представления контейнера не удаляется должным образом, когда он вам не нужен.
источник
Все описанное выше перепробовал безрезультатно. У меня в ИБ все было подключено правильно, ровно с одним
UIViewController
назначен корневым контроллером представления. У меня не было идентификаторов, но я добавил их ко всем своим контроллерам.Единственный способ заставить предупреждение исчезнуть - это сделать все, что описано выше (включая перезагрузку компьютера и чистую сборку), затем переключиться на безошибочную ветку моего проекта в git и обратно.
Не уверен, какое действие исправило его или какая комбинация действий, но сама по себе это была не чистая сборка. Это может быть побочным продуктом того, что Main.storyboard всегда меняется после простого открытия, а это значит, что мне приходится делать это
git commit -m "Stupid storyboard"
чаще, чем я хочу.источник
Вот что у меня сработало:
источник
У меня такая же ошибка: для меня ошибка заключалась в том, что я не инициировал контроллер представления в своей раскадровке.
Исправление удалило это предупреждение.
источник
Просто предоставление всем MVC идентификатора раскадровки сработало для меня.
источник