#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, и теперь он работает нормально 🙂