Я работаю над простым приложением для iPhone.
У меня есть 1 UINavigationController и 2 подкласса UIViewController.
У меня есть файл MainWindow.xib, PersonListView.xib и PersonDetailView.xib.
MainWindow.xib имеет UINavigationController с представлением, связанным с файлом PersonListView.xib.
В PersonListView.xib Владелец файла указан как класс PersonListViewController.
У меня есть несколько кнопок в PersonListView, а также ярлыки и изображения. Все отображается правильно.
Когда я пытаюсь связать кнопку на PersonListView с моим классом PersonListViewController, кнопка не срабатывает ....
Результат:
* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «* - [UIViewController viewDetail]: нераспознанный селектор, отправленный экземпляру 0x450d50 '
Если я захожу в консоль отладки и печатаю объект 0x450d50, я получаю:
(gdb) print-object 0x450d50
(ГБД)
Интерфейсный Разработчик правильно показывает Владельца файла как PersonListViewController, так почему мое действие кнопки (связанное с Владельцем файла) так или иначе переходит в суперкласс?
EDIT1: Хорошо, похоже, что я не получал экземпляр подкласса, если в моем MainWindow.xib я явно не установил класс контроллера представления в свой подкласс.
Тем не менее, я все еще должен что-то упустить, потому что, конечно, я должен иметь возможность запускать произвольные подклассы UIViewController, просто выменив имя файла NIB из главного окна?
EDIT2: (Ответ Кевину)
Это не то, что я говорю относительно содержимого XIB.
У меня есть 3 XIB:
MainWindow
PeopleListView
PeopleDetailView
PeopleListView и PeopleDetailView имеют каждого владельца файла, который является соответствующим подклассом UIViewController. Очевидно, что мне нужно, чтобы мои события переходили к нужным классам контроллеров при переходе от страницы к странице ... но если я могу использовать только UIViewController по умолчанию или один подкласс, это будет намного сложнее?
Я могу получить правильный эффект в коде, вручную установив UINavigationController с правильным корнем, но я чувствую, что через InterfaceBuilder должен быть лучший путь.
EDIT3: (Кендаллу)
Я не использую панель вкладок. Однако модель та же самая, что представление в моем контроллере навигации должно быть связано с одним подклассом, что выглядит немного странно.
РЕДАКТИРОВАТЬ4: (к потерянному переходу)
PersonListViewController имеет соответствующий - (IBAction) viewDetail; метод. Проблема в том, что я не могу найти способ, в моем MainWindow.xib, пометить представление внутри моего UINavigationController как «изначально загрузить это из PersonListView.xib, с PersonListViewController в качестве представления», которое не затруднит замените PersonListView на PersonDetailView.