Как проверить, существует ли раскадровка в конкретном NSBundle

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

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

Поэтому моя цель - проверить, существует ли раскадровка с заданным именем в [NSBundle mainBundle], если нет, то я получу базовую версию из моего фреймворка.

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

Я также пытался pathForResource в комплекте:

if([[NSBundle mainBundle] pathForResource:name ofType:@"storyboard"] != nil) {

}

Но это никогда не находит раскадровку.

Кто-нибудь знает какой-либо другой способ, которым я могу проверить, существует ли раскадровка в определенном пакете?

2 ответа

Решение

Итак, я был почти там с тем, что я уже пытался. Согласно комментарию на мой вопрос, скомпилированное расширение для раскадровки - "storyboardc". Таким образом, я могу проверить, существует ли раскадровка в связке следующим образом:

if([[NSBundle mainBundle] pathForResource:name ofType:@"storyboardc"] != nil) {
    //The storyboard exists
} else {
    //The storyboard isn't in the bundle, get it from the framework bundle.
}

Быстрый:

      if Bundle.main.path(forResource: storyboardName, ofType: "storyboardc") != nil 
{
   //The storyboard exists
}
Другие вопросы по тегам