2017-01-15 3 views
1

У меня есть приложение с двумя объектами, которые имеют почти идентичные пользовательские интерфейсы и функциональность (оплата перед IAP). По этой причине у них есть раскадровка. В Objective-C это не проблема.Совместное использование раскадровки по нескольким целям в Swift

Однако теперь я начинаю внедрять новые контроллеры представлений с помощью Swift. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно указать «Модуль» для моих настраиваемых контроллеров представлений, реализованных в моей раскадровке.

Обычай контроллера представления Идентичность инспектор выглядит следующим образом:

enter image description here

Я вынужден назначить одну из моих целей. Какую бы цель я выбираю, другая цель будет врезаться с сообщением, такие как:

2017-01-15 17: 26: 32,284 TapTyping [85802: 15083599] Неизвестный класс _TtC13TapTypingLite19EntryViewController в Interface Builder файл.

Как настроить мою общую раскадровку так, чтобы она создавалась для обеих целей (как она используется в Objective-C)?

+0

я работать наоборот - несколько UIViews в рамочной мишени и в мои приложения/расширения my Framework - мой модуль. – dfd

+0

Вы уверены, что хотите указать модуль? Обычно я удаляю содержимое этого поля, и по умолчанию он равен «Current - {Module name}». – Estel

+0

@dfd yah .. похоже, мне может понадобиться создать общую инфраструктуру для таких контроллеров вида – awolf

ответ

1

Awolf, у меня также есть проект с несколькими целями, и я начал постепенно преобразовывать его из Objective-C в Swift. Через много испытаний я обнаружил, что для модулей, которые были расширены с Objective-C до Swift, как только я сменил класс с Objective-C на имя Swift, у меня также была эта ошибка «Неизвестный класс XXX в файле построителя интерфейса», , Я обнаружил через пробную версию и ошибку, что модуль должен быть указан для представлений/таблиц с помощью файлов Swift, или они не будут найдены. Модуль должен быть пустым для представлений/таблиц с помощью файлов Objective-C, иначе они не будут найдены. Я сделал эти изменения в исходном исходном коде XML, нажав Control на MainStoryboard.storyboard и выбрав Open As, Source Code. Мое соглашение об именах состоит в том, что файлы, преобразованные в быстрый запуск с «ProjectOrganizer» и модули, которые по-прежнему Objective-C начинаются с «StatusReport». Вот два примера:

Objective-C Пример: img

Swift пример: img

После завершения редактирования необработанного источника XML вы можете переключиться обратно в режим ГИП Interface Builder с помощью Control- Нажав на MainStoryBoard.storyboard и выбрав Open As, Interface Builder - Storyboard.

Если вы решите параметр Objective-C vs. Swift для модуля, все цели будут успешно сработаны, несмотря на то, что все файлы Swift указаны только как одна из ваших целей. Убедитесь, что все настройки настраиваемого модуля установлены на одну и ту же цель.

[Swift Пример в Interface Builder GUI] [3]

[Objective-C Пример в Interface Builder GUI] [4]

+0

Если вы хотите внести эти изменения исключительно в GUI Interface Builder, для каждого Swift View/TableView вам нужно выбрать конкретный (настраиваемый) модуль и отметить поле «Наследовать от цели». Для каждого объекта Objective-C View/TableView оставить (Пользовательский) модуль указанным как «Нет». –

+0

Привет @LarryRicker, ваши два скриншота кажутся точно такими же. Возможно, ошибка? Что в стороне, что вы указываете в качестве модуля для файлов Swift? Предполагается, что этот модуль является целью, но, как я сказал в первоначальном вопросе, у меня есть две цели. Указание чего-либо для файлов Swift приводит к тому, что другие цели не строятся. Поэтому я не уверен, что ваше решение решит это. – awolf

+0

Спасибо, что указал. У меня есть 4 снимка экрана, но ограничения на мой ID не позволили мне загрузить их. Я могу вернуться позже, когда буду обновляться. Я удалил один и загрузил правильный снимок экрана для Swift. –

Смежные вопросы