2014-03-17 4 views
0

У меня есть два разных, но связанных проекта. В родительском проекте A есть раскадровка. Детский проект B, который (теоретически) расширяет функциональность A, должен создать экземпляр основной раскадровки A в AppDelegate. В моей рабочей области xcode я включил родительский элемент A в дочерний проект B в качестве связанного проекта, и я могу видеть все файлы. Я использую следующий код приложения: didFinishLaunchingWithOptions:Загрузка раскадровки из другого проекта Xcode

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhone.storyboard" bundle:[NSBundle mainBundle]]; 
MainViewController *vc = (MainViewController *)[storyboard instantiateInitialViewController]; 
_window.rootViewController = vc; 
[self.window makeKeyAndVisible]; 

Код не удается во время выполнения на storyboardWithName линии, я предполагаю, потому что iPhone.storyboard не доступен сразу в B, и он не знает, чтобы искать это в пределах A. Фактический файл раскадровки находится в другой папке проекта дочернего проекта проекта B на диске.

ответ

3

Это не имеет никакого отношения к B и A. Файлы в проекте могут быть расположены в любом месте. Ваша ошибка: runtime. Это связано с приложением , в котором вы строите и работаете. Подумайте о том, что говорит эта линия:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhone.storyboard" bundle:[NSBundle mainBundle]]; 

Таким образом, вы заявляете здесь, что есть раскадровка называется iPhone.storyboard внутри основного пучка этого приложения. Но нет. Приложение создает, и вы ничего не делаете, чтобы заставить раскадровку скопировать в пакет приложения как часть этого процесса. Это то, что вам нужно сделать.

Чтобы получить раскадровку, находящуюся в главном комплекте, добавьте ее в фазу сборки экземпляра Copy Bundle.

(Сейчас, конечно, могут быть и другие проблемы, например, если классы, указанные в данной раскадровки не являются также частью этого приложения. Но это не то, что ваш вопрос был.)

+1

Кроме того, я не думаю, вы должны включить суффикс '.storyboard' в имя строки раскадровки. – matt

+0

Расширение действительно может быть проблемой. См. [Документация UIStoryboard] (https://developer.apple.com/library/ios/documentation/uikit/reference/UIStoryboard_Class/Reference/Reference.html#//apple_ref/occ/clm/UIStoryboard/storyboardWithName:bundle :) «Параметры * имя *: имя файла ресурса раскадровки ** без расширения имени файла **.". –

+0

Этот ответ действительно полезен, благодаря матовому. Что касается расширения, я знаю об этой проблеме, я просто добавил, что для целей вопроса, чтобы убедиться, что все поняли, что это файл раскадровки, но похоже, что я просто добавил больше путаницы. –

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