Классы Swift не загружаются должным образом из раскадровки - PullRequest
0 голосов
/ 29 мая 2018

У меня есть проект с несколькими целями и несколькими конфигурациями: скажем, конфигурации Target1/Target2 и Debug/Alpha/Release.У меня также есть раскадровка с некоторыми настраиваемыми классами: скажем, настраиваемый класс ViewController, который является начальным ВК в моей раскадровке.Я хочу загрузить контроллер представления из раскадровки в коде, подобном следующему:

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as! ViewController

ViewController является членом обеих целей.Когда я запускаю приведенный выше код на Target1 - все хорошо на обеих конфигурациях.Когда я запускаю его на Target2, на Debug все нормально, но на Alpha происходит сбой с сообщением:

Неизвестный класс ViewController в файле Interface Builder.Не удалось преобразовать значение типа 'UIViewController' (0x10fbc71d0) в 'Target2.ViewController' (0x10b29cb88).

(в случае отсутствия customModule в XML раскадровки)

или

Неизвестный класс _TtC6Target19ViewController в файле Interface Builder.Не удалось преобразовать значение типа «UIViewController» (0x1083161d0) в «Target2.ViewController» (0x103e6b840).

(в случае, если customModule в XML раскадровки не соответствует текущей цели)

, что в конечном итоге приводит к сбою приложения.

Похоже, что не удается добавить правильное пространство имен к имени класса при загрузке его из раскадровки.

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

<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">

Если я указываю модуль в инспекторе раскадровок или непосредственно в XML для этого контроллера представления (customModule = "Target2"), все работает для обоихконфигурация на Target2, но явно не на Target1.

В настройках сборки для обеих целей: Интерфейсный компилятор раскадровки интерфейса - Параметры -> Модуль по умолчанию наследуется от $(PRODUCT_MODULE_NAME), который наследуется от $(PRODUCT_NAME:c99extidentifier), который в итоге наследует $(TARGET_NAME).Если я печатаю TARGET_NAME во время выполнения, когда я на Target2 + Alpha (что не работает), я вижу правильное имя цели (Target2 в данном случае).Предполагается, что это означает, что имя модуля должно быть правильно добавлено в качестве пространства имен в ViewController при загрузке.

Когда я создал пример проекта с описанным набором конфигурации, все работало, что означает, что что-то не так в моемAlpha -конфигурация в реальном проекте, но это почти точная копия Debug (без учета всех путей), которая работает.

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

...