2014-12-23 3 views
0

Я получаю ошибку вида:ошибка Раскадровка не содержит контроллер с идентификатором

Нагрузочного приложение из-за неперехваченное исключением «NSInvalidArgumentException», причина: «раскадровка() не содержит вид контроллер с идентификатором 'SBMenu'»

На мой AppDelegate, я проверяю, если пользователь подключен и запуск:

  • контроллер вида с идентификатором раскадровка «SBLogin», если пользователь не подключен
  • или контроллер Разделить с раскадровки идентификатором «SBMenu», если пользователь уже подключен

Я использую Xcode 6.1.1 , sdk 8.1, цель развертывания 7.0
На эмуляторе iOS 8.1 все нормально, и я не получаю ошибку.
На эмуляторе прошивкой 7.0.3 или 7.1, я получаю ошибку

код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

//... 

if(self.token != nil){ 
    //crash 
    self.viewController = (UIViewController *)[mainSB instantiateViewControllerWithIdentifier:@"SBMenu"]; 
}else{ 
    //don't crash 
    self.viewController = (UIViewController *)[mainSB instantiateViewControllerWithIdentifier:@"SBLogin"]; 
} 

self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 
[self.window setRootViewController:self.viewController]; 
[self.window setBackgroundColor:[UIColor whiteColor]]; 
[self.window makeKeyAndVisible]; 

return YES; 
} 

Я уже проверил советы нашли на другой пост:

  • только одна история доска
  • только «база» в локализации
  • раскадровка Идентификатор правильно установлен
  • тестов удалить приложение из тренажера, прежде чем строить
  • чистого проект
+0

Можете ли вы показать свой код, который создает экземпляр 'mainSB'? И что показано в разделе «Основной интерфейс» в «Информация о развертывании» вашей целевой аудитории? (Кроме того, чтобы проверить идентификатор «SBMenu» контроллера вида в Interface Builder, попробуйте удалить идентификатор и снова ввести его, в том числе ударить return и перестроить ...) –

+0

Оттуда документы: «Строка идентификатора, которая уникально идентифицирует контроллер представления в файле раскадровки. Вы устанавливаете идентификатор для данного контроллера представления в Interface Builder при настройке файла раскадровки.Этот идентификатор не является свойством самого объекта контроллера представления и используется только файлом раскадровки для поиска контроллера представления. «Вы установили идентификатор« SBMenu »в viewController? – zaph

+0

@MattGibson-код, который создает экземпляр mainSB: UIStoryboard * mainSB = [UIStoryboard storyboardWithName: @ «Main» bundle: nil]; в разделе «Основной интерфейс»: поле пусто, когда я устанавливаю его в Main, я получаю «Не удалось создать экземпляр контроллера по умолчанию для UIMainStoryboardFile« Main »- возможно, назначенная точка входа не установлена? »-> точка входа не установлена, потому что я хочу ее выбрать. –

ответ

0

This will only work if you are using Storyboard(s).

Что вам нужно сделать, это зайти в раскадровку, и найти контроллер представления, что это ваш класс «SBMenu».

Откройте боковую панель, и найти это:

enter image description here

Посмотрите на коробку, которая говорит Storyboard ID. Убедитесь, что в вашем классе SBMenu есть SBMenu, а также проверьте свой класс SBLogin.

Я надеюсь, что это поможет!

0

Я столкнулся с той же проблемой, но с помощью UISplitViewController, после нескольких часов поиска, я обнаружил, что отключение классов размера может решить эту проблему.

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