presentModalViewControllerAnimated: дает белый экран

#cocoa-touch #ios #loading #iboutlet

#cocoa-touch #iOS #Загрузка #iboutlet

Вопрос:

Всем привет. Что-то, что меня совсем немного беспокоит в последнее время, — это этот пользовательский видеоплеер, который я собрал. Он в значительной степени основан на рабочем, NGMoviePlayer .

Проблема в следующем: у меня есть .xib в пакете ресурсов, совместимом с UIKit. Когда я вызываю:

 [MyMoviePlayerViewController initWithNibName:@"MyMoviePlayerViewController"
 bundle:[NSBundle bundleWithPath:
         [[NSBundle mainBundle] bundlePath]
          stringByAppendingPathComponent:@"MyMoviePlayerViewController.bundle"]];
  

..в моем пользовательском классе, а затем получить доступ к view (таким образом вызывая loadView ), он не выдает никаких ошибок, но и фактически не загружает розетки должным образом. Мне представлен белый экран, и отладка показывает, что все визуальные элементы исправны 0x0 , но ошибки, как и следовало ожидать, не было.

РЕДАКТИРОВАТЬ: теперь я также попытался просто загрузить файл .xib вне пакета ресурсов в моем целевом приложении, и происходит то же самое (белый экран).

Конкретные, которые я искал, были либо:

  • Could not load NIB <nibname>... если он вообще не был найден, или
  • ...loaded the <nibname> NIB but the view outlet was not set если он был найден, но не подключен должным образом

xib находится в локальном приложении (я понимаю, что статические библиотеки не могут содержать xibs). Я пытался использовать этот же пакет ресурсов с NGMoviePlayerDemo проектом, предоставленным автором NGMoviePlayer , и он действительно выдает ошибку:

 Could not load NIB in bundle:
'/Users/.../MyMoviePlayerViewController.bundle (not yet loaded)'
 with name 'MyMoviePlayerViewController'
  

Я перешел к пути, который он отображает для пакета, и в этом месте существует MyMoviePlayerViewController.xib файл.

Я также пытался использовать bundle:nil на случай, если Xcode по какой-то причине объединил ресурсы каталогов пакетов с основным. Оба случая не выдают ошибки и отображают белый экран в моем реальном проекте. Оба случая выдают Could not load NIB ошибку в NGMoviePlayerDemo проекте.

РЕДАКТИРОВАТЬ: я пробовал тот же файл .xib отдельно от пакета ресурсов в NGMoviePlayerDemo приложении, и он работает нормально.

Все входные данные высоко ценятся.

Ответ №1:

Решение: обратите внимание на Unknown class <classname> in Interface Builder file. сообщения.

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

Я объединил весь код и переменные из подклассов в родительский класс movie Player, и теперь он работает нормально 🙂