UIStoryboard name и bundle

У меня есть эта строка кода:

[UIStoryboard storyboardWithName:(NSString *) bundle (NSBundle *)];

и файл раскадровки. Где я действительно вставляю имя контроллера и где я могу найти пакет?

Это глупый вопрос, но я не могу понять это

Ответ 1

Все очень просто!

Это код:

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

Где @ "Главная раскадровка" - это имя вашего файла .storyboard. Пакет - это просто пакет, содержащий ваш файл .storyboard, обычно это основной комплект вашего приложения.

Если вы хотите получить доступ к некоторым UIViewControllers, например, с целью подталкивания его в стек вашего UINavigationController, вы должны сделать это:

UIViewController *yourViewController = 
[storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];

Вы можете установить идентификатор в свой UIViewController в Индексе идентификации идентификаторов Xcode!

Надеюсь, это поможет вам!

Ответ 2

Параметр name - имя вашего файла .storyboard (без расширения).

bundle обычно является основным пакетом вашего приложения. В общем, вы проходите nil, чтобы среда выполнения выполняла поиск вашего файла раскадровки в основном пакете по умолчанию (так же, как если бы вы проходили [NSBundle mainBundle]). И на практике у вас обычно есть только один пакет в приложениях iOS, который является основным пакетом, представляющим ваш пакет IPA, поэтому nil является общим значением для этого параметра)

Например, если у вас есть раскадровка с именем MyStory.storyboard, вы будете писать:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStory" bundle:nil];

На самом деле все это объясняется в документации Apple для этого метода.

storyboardWithName: расслоение:

Создает и возвращает объект раскадровки для указанного ресурса ресурса раскадровки.

+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil

Параметры

  • name: Имя файла ресурса раскадровки без расширения имени файла. Этот метод вызывает исключение, если этот параметр равен нулю.
  • storyboardBundleOrNil: пакет, содержащий файл раскадровки и связанные с ним ресурсы. Если вы укажете nil, этот метод будет выглядеть в основном пакете текущего приложения.

Ответ 3

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

Ответ 4

Swift 5 версия:

UIStoryboard(name: "Main", bundle: nil)

В этом примере я использовал стандартный раскадровочный файл "Main" в качестве ссылки.