2011-02-07 5 views
2

У меня есть следующая проблема. Я создал ViewController довольно много, как вышеКонтроллер представления подкласса iPhone и IBOutlet UITableView

@interface MyViewController : UIViewController { 
    IBOutlet UITableView *myTableView; 
} 

@property (nonatomic, retain) IBOutlet UITableView *myTableView; 

Я связан myTableView на Interface Builder для UITableView согласующего СИБ. и я подклассы MyViewController создать YourViewController, как так:

@interface YourViewController : MyViewController { 

} 

А потом я загружаю из TabBarController YourViewController на вкладке элемента. Хотя я вижу, что MyViewController действительно вызывается в конце, на эмуляторе не отображается табличное представление.

Я попытался отладить MyViewController, и, похоже, IBOutlet равен нулю.

Почему?

ответ

0

У меня возникли серьезные проблемы с наследованием и IBOutlets и IBAction. Я советую вам избежать этого и создать общий материал по-другому.

У меня были проблемы с ошибками при получении предупреждений о памяти, например. Розетки и действия не восстанавливались должным образом, когда они были определены в базовом классе по отношению к производному классу.

+0

Есть ли у вас какие-либо предложения о том, как реализовать это? Все мои подклассы выполняют точно то же, что и MyViewController, и единственное, что меняется, - это то, как данные извлекаются на каждом из них. У меня такое чувство, что это имеет какое-то отношение к initCoder: это должен быть стандартный сценарий подкласса ... – mobius

+0

Ну, я бы сохранил всю тяжелую работу в базовом классе и имел только выходы и действия в производном классе, насколько это возможно. – jv42

0

Возможно, файл nib MyViewController не загружен вообще. Используете ли вы для YourViewController определенный файл nib? и каким образом вы создаете YourViewController.

Можете ли вы также попытаться определить метод «awakeFromNib» в YourViewController, а затем из него вызвать [super awakeFromNib]?

Однако, чтобы понять вашу проблему, вы должны четко объяснить, как вы загружаете объекты, и если и где вы используете Nibs?

+0

Я думаю, что вы на правильном пути здесь. Контроллер YourViewController загружается через наконечник. (Он указан как NIB для элемента панели вкладок). Если я загружаю YourViewController с помощью initWithNibName, он корректно отображает NIB MyViewController. Однако при загрузке из TabBar Nib он ничего не отображает. Я пробовал awakeFromNib, как вы предполагали, но ничего не приходит в себя. – mobius

0

Если вы добавите его динамически, используя код, тогда он будет работать. Не использовать Nib.

+0

Невозможно загрузить его через Nib? Даже если мы перезапишем initWithCoder: скажем? – mobius

+0

Итак, я попытался перегрузить initWithCoder, чтобы вызвать initWithNibName, и он действительно работает, хотя кажется, что теперь проблема связана с тем, что контроллер навигации не переключает представления ... Всегда есть решение, которое, я думаю, дублирует nib и назначаю его как File владелец YourController и загрузите этот значок из табуляции ... – mobius

0

UITableView (т. Е. Ваш myTableView) нужны делегаты для источника данных и его контроля. И вашему контроллеру нужна ссылка на представление таблицы в xib.

  1. объявить протоколы делегатов таблицы в разделе интерфейса вашего контроллера.

  2. используя IB, свяжите TableView в файле xib с владельцем: делегаты.

  3. используя IB, свяжите владельца файла myTableView с таблицейView в xib.

Надеюсь, это поможет.

+0

Вы правы в том, что вы упомянули. Я сделал это, но для простоты вопроса я не упомянул об этом. Остается проблема. – mobius

-1

Если предположить, что у вас есть весь свой стек навигации в MainWindow.xib

  • Открыть MainWindow.XIB
  • Выберите YourViewController (или любой другой контроллер, который подклассов UITableViewController называется)
  • Выбор атрибутов Инспектор
  • Убедитесь, что свойство «NIB Name» имеет ваш правильный YourViewController (Или как имя), выбранное

У меня была такая же проблема, это решило это для меня.

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