2013-03-23 7 views
1

В настоящее время я пытаюсь реализовать вводное (учебное) подразделение в своем приложении, и я хотел бы дать пользователям возможность просмотреть его в любое время. Основная часть моего приложения сделана из файлов XIB UIViewController (ViewController_iPhone.xib, ViewController_iPad.xib), и для моих вводных представлений мне было легче работать с раскадровки. Итак, в кратком сводке: я пытаюсь переключиться с основного ViewController (XIB) на начальный ViewController внутри раскадровки, в зависимости от типа устройства -> все это начинается с крана UIButton.Приложение попыталось представить контроллер представления модели nil

В моей раскадровке я назначен индивидуальная Раскадровка идентификаторы, так ли это будет IPAD, iPhone или iPhone-4inch, было бы загрузить соответствующий вид:

раскадровки удостоверения личности: 3-Slide1 (IPAD), 4-Slide1 (iPhone), 5-Slide1 (iPhone-4inch).

Screenshot

Вот код кнопки в ViewController.m:

NSString *nibName; 
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
      nibName = @"3-Slide1"; 
     } else { 
      if ([UIScreen mainScreen].bounds.size.height == 480.0) { 
       nibName = @"4-Slide1"; 
      } else { 
       nibName = @"5-Slide1"; 
      } 
     } 

     IntroViewController *introViewController = [self.storyboard instantiateViewControllerWithIdentifier:nibName]; 

     [self presentViewController:introViewController animated:YES completion:nil]; 

SIGABRT Ошибка:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <ViewController: 0x20865170>. 

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

ПРИМЕЧАНИЕ: Это не дублирующее сообщение, есть много сообщений с одинаковой общей ошибкой SIGABRT, но у всех, кажется, разные проблемы.

+0

Держись. Я только что прочитал ваш первый параграф. Это тот случай, когда текущий контроллер представления (тот, с которого вы показали код, из которого вы пытаетесь загрузить это вступление) был * NOT * загружен с раскадровки? –

ответ

1

Почему есть переход, ведущий от вашего контроллера зрения к контроллеру информационного представления, если вы нажимаете его по-разному.

Я бы просто сделал отдельные segues для контроллеров представления (в любом случае, будет другой файл раскадровки), назовите segues и используйте свою логику, чтобы определить правильный segue. Затем используйте performSegueWithIdentifier:, а не instantiateViewControllerWithIdentifier.

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

+0

В этом отношении даже не кажется, что должно быть более одного сегмента: iPad/iPhone, как правило, будет в разных раскадках (и может иметь одно и то же имя в каждом), а iPhone 3.5 "/ 4" обычно должен 't требуют разных целевых контроллеров, просто интеллектуальный код/​​ограничения макета. –

+0

Справа. Если вам нужно просто настроить носитель, вы можете сделать это в контроллере ... – Mundi

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