Почему я могу получить доступ к Storyboard_a.storyboard и не получить доступ к Storyboard_b.storyboard в моей структуре? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть фреймворк с двумя раскадровками: StoryBoard_A.storyboard и StoryBoard_B.storyboard.Я могу добраться до StoryBoard_A, но не до StoryBoard_B

. Я использую свой фреймворк в качестве модуля в своем основном проекте.в моем файле podspec для фреймворка у меня есть:

s.source_files = "myFramework/**/*.{swift}"
s.resource_bundles = { 'myFramework' => ['myFramework/**/*.{storyboard,xib,xcassets}'] }

Я знаю, что обе раскадровки находятся в комплекте myFramework, потому что:

  1. На этапах сборки myFramework, в разделе Копировать ресурсы комплекта, я вижу их обоихвключены.
  2. В myFramework.framework я вижу: StoryBoard_A.storyboardc и StoryBoard_B.storyboardc
  3. Когда я «устанавливаю» myFramework в качестве модуля разработки, я вижу обе раскадровки в навигаторе Project в Project.основной проект

В myFramework из ViewController_1 я запускаю ViewController_a из StoryBoard_A.storyboard и ViewController_b из StoryBoard_B.storyboard.Я использую ту же технику:

let podBundle = Bundle(for: ViewController_1.self)
let bundleURL = podBundle.url(forResource: "myFramework", withExtension: "bundle")
let bundle = Bundle(url: bundleURL!)!
let storyBoard = UIStoryboard(name: "StoryBoard_A", bundle: bundle)
let viewController_a = storyBoard.instantiateViewController(withIdentifier: "ViewController_a_id") as? ViewController_a

, но когда я делаю:

let storyBoard = UIStoryboard(name: "StoryBoard_B", bundle: bundle)
let viewController_b = storyBoard.instantiateViewController(withIdentifier: "ViewController_b_id") as? ViewController_b

приложение вылетает во второй строке со следующей ошибкой:

*** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Не удалось найти раскадровку с именем« StoryBoard_B »в комплекте ...

Что такоеЯ пропал?

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Я нашел проблему: Поскольку это был фрагмент кода, который я унаследовал, и я попытался объединить его с myFramework, я не знал о том факте, что внутри ViewController_b.swift (тот, который я пытался инициировать из раскадровки), было:

var storyboard = UIStoryboard(name: "Stroyboard_B", bundle: nil)

в классе.

Я изменил это на комплект, который я создал так же, как описано выше, и это решило проблему.

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

0 голосов
/ 07 мая 2019

Щелкните правой кнопкой мыши ваше приложение в разделе Продукты в Xcode и изучите его в Finder. Просто проверьте наличие файлов StoryBoard_B.storyboardc. Если файлов нет, вам нужно решить другую проблему.

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

let podBundle = Bundle(forClass: ViewController_1.self)
let bundleURL = podBundle.resourceURL?.URLByAppendingPathComponent("myFramework.bundle")
let resourceBundle = Bundle(URL: bundleURL!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...