Я пытался следовать Руководство по программированию табличного представления для iPhone OS , но у меня возникли проблемы при создании нового контроллера табличного представления, который загружает свои данные из файла пера.
В частности, я пытался выполнить шаги, описанные в этой части :
Если вы предпочитаете загружать табличное представление
управляется пользовательским табличным представлением
контроллер из файла пера, вы должны
выполните следующие действия:
- В Интерфейсном Разработчике создайте пустой файл пера Cocoa Touch (Файл>
Новый).
- Перетащите объект UITableViewController из Интерфейсного Разработчика
Библиотека в окне документа пера.
- Сохраните файл пера в каталоге вашего проекта под соответствующим именем
и при появлении запроса выберите
проект для добавления файла пера к
это.
- Выберите Table View Controller в окне документа пера и откройте
Идентификационная панель инспектора. Задавать
класс для вашего пользовательского табличного представления
класс контроллера.
- Выберите владельца файла в окне документа пера и установите его класс
идентичность пользовательского табличного представления
класс контроллера.
- Настройка табличного представления в Интерфейсном Разработчике.
- Выберите контроллер табличного представления в окне документа пера, откройте
Панель атрибутов инспектора и
введите (или выберите) название пера
файл в поле Nib Name.
Итак, я создал новый подкласс UITableViewController в Xcode (называемый «MyTableViewController»), затем я пошел в IB и выполнил эти шаги. Я удостоверился, что связал все атрибуты Class с тем же именем, что и подкласс UITableViewController, который я создал в XCode, как сказано в шагах.
Но теперь я получаю следующее предупреждение в IB:
«My Table View Controller» имеет свои
Установлены свойства «Просмотр» и «Имя пера».
Эта конфигурация не поддерживается.
Когда я запускаю приложение и нажимаю контроллер табличного представления, он появляется, но кажется, что из nib-файла вообще ничего не загружается (например, я установил альфа на 0 вместо 1).
Есть идеи, что я делаю не так?
Спасибо за помощь.
Вот еще немного информации, которая может помочь вам лучше понять ситуацию.
Я заметил несколько различий между созданием UITableViewController с шаблоном (например, созданием нового приложения на основе навигации) и созданием его самостоятельно (например, следуя шагам выше). Я буду называть каждый из них TemplateNib и CustomNib соответственно, чтобы было легче понять различия.
В TemplateNib в окне документа есть следующие объекты:
- Владелец файла
- Первый ответчик
- Таблица
В CustomNib в окне документа есть следующие объекты:
- Владелец файла
- Первый ответчик
- My Custom Table View Controller
Другое отличие заключается в ссылках владельца файла ...
Владелец файла TemplateNib:
- 1080 * Outlets *
- tableView -> Table View
- просмотр -> просмотр таблицы
- Ссылочные точки
- dataSource -> Table View
- делегат -> Представление таблицы
Владелец файла CustomNib:
- 1100 * Outlets *
- просмотр -> (ничего)
CustomNib Контроллер представления моей таблицы:
- Outlets
- view -> Table View (он неактивен, поэтому вы не можете его удалить)
- Ссылочные точки
- dataSource -> Представление таблицы
- делегат -> Представление таблицы
Обновление:
Я попытался имитировать файл .xib, созданный шаблоном, выполнив следующие действия:
- Создан пустой файл в Интерфейсном Разработчике.
- Установите для владельца файла класс, который наследуется от UITableViewController.
- Добавлен табличный вид в окно документа.
- Установите источник данных табличного представления и делегируйте Владельцу файла.
- Установите представление «Владелец файла» на представление «Таблица».
- Добавлено свойство tableView на панели Identity типа UITableView .
- Установите свойство TableView владельца файла (которое я только что создал) на представление таблицы.
Однако, похоже, что он не загружается из файла NIB. (Я также нигде не определяю имя файла NIB, хотя ... есть ли место, где мне нужно его установить, или он ищет файл с тем же именем?).
Затем я попытался переопределить initWithNibName для загрузки по имени файла пера, и теперь он, похоже, загружает его из файла пера. Однако, если я посмотрю на файл .m контроллера табличного представления TemplateNib, ему не нужно переопределять этот метод. Почему? Я все еще думаю, что делаю это неправильно, потому что в Руководстве по программированию ничего не сказано о том, как это сделать.
Обновление:
Я попытался сравнить два файла .xib с помощью инструмента сравнения, единственное существенное различие между ними, по-видимому:
<string key="superclassName">UITableViewController</string>
// and:
<reference key="NSSuperview"/>
Я не вижу ссылки на файл Nib в исходном файле, есть ли другие файлы, которые я должен проверить?
Обновление:
Кажется, что то, что заставляет TemplateNib загружаться из файла nib, это то, что в MainWindow.xib (имя по умолчанию, заданное шаблоном), RootViewController добавляется со свойством NIB Name, имеющим значение "RootViewController". Кроме того, его класс установлен на «RootViewController».
Я попытался поместить точку останова в initWithNibName: bundle: и initWithStyle: в RootViewController, однако он никогда не достигнет этого. Мне интересно, как создается TableViewController, когда вы настраиваете его в MainWindow.xib следующим образом.
Я также попытался добавить свой настраиваемый контроллер табличного представления в MainWindow.xib, установив имена классов и перьев в надежде, что он загрузит его из указанного мной кончика файла, но он даже не вызывает iniWithNibName.