Создание файла пера для контроллера табличного представления - PullRequest
4 голосов
/ 07 октября 2009

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

В частности, я пытался выполнить шаги, описанные в этой части :

Если вы предпочитаете загружать табличное представление управляется пользовательским табличным представлением контроллер из файла пера, вы должны выполните следующие действия:

  1. В Интерфейсном Разработчике создайте пустой файл пера Cocoa Touch (Файл> Новый).
  2. Перетащите объект UITableViewController из Интерфейсного Разработчика Библиотека в окне документа пера.
  3. Сохраните файл пера в каталоге вашего проекта под соответствующим именем и при появлении запроса выберите проект для добавления файла пера к это.
  4. Выберите Table View Controller в окне документа пера и откройте Идентификационная панель инспектора. Задавать класс для вашего пользовательского табличного представления класс контроллера.
  5. Выберите владельца файла в окне документа пера и установите его класс идентичность пользовательского табличного представления класс контроллера.
  6. Настройка табличного представления в Интерфейсном Разработчике.
  7. Выберите контроллер табличного представления в окне документа пера, откройте Панель атрибутов инспектора и введите (или выберите) название пера файл в поле 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, созданный шаблоном, выполнив следующие действия:

  1. Создан пустой файл в Интерфейсном Разработчике.
  2. Установите для владельца файла класс, который наследуется от UITableViewController.
  3. Добавлен табличный вид в окно документа.
  4. Установите источник данных табличного представления и делегируйте Владельцу файла.
  5. Установите представление «Владелец файла» на представление «Таблица».
  6. Добавлено свойство tableView на панели Identity типа UITableView .
  7. Установите свойство 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.

Ответы [ 5 ]

7 голосов
/ 27 октября 2009
  1. Создайте TableViewController в Xcode.
  2. Создайте пустой файл пера в Интерфейсном Разработчике.
  3. Установите свойство класса владельца файла для TableViewController с шага 1.
  4. Добавить TableView в пустой файл пера.
  5. Установите свойство представления «Владелец файла» для TableView из шага 4.
  6. Настройте TableView в IB по своему усмотрению.
  7. Переопределите initWithNibName: bundle: метод в Xcode для созданного вами TableViewController и используйте код, подобный следующему:


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:@"MyNibName" bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}
2 голосов
/ 21 апреля 2010

Вчера вечером у меня была такая же проблема, и я нашел этот пост, пытаясь найти ответ. Я решил это.

По сути, я открыл неправильный файл XIB (я надеялся, что main_window.xib, а не контроллеры представления xib)

Я отключил все элементы управления из моей основной xib, вставил их в xib контроллеров, перестроил все, заново подключил все выходы / действия и предупреждение исчезло:)

Надеюсь, это кому-нибудь поможет:)

1 голос
/ 26 ноября 2009

У вас есть два места, где ваш UITableViewController отображается в Интерфейсном Разработчике.

(1) Отображается в кончике с собственным именем контроллера.

(2) Он отображается как объект контроллера в кончике другого объекта, обычно MainWindow.

Ваша проблема в (2). Есть два способа установить табличное представление для UITableViewController в Интерфейсном конструкторе. Во-первых, вы можете создать UITableView под контроллером в MainWindow и подключить его к свойству view контроллера. Во-вторых, вы можете вызвать инспектора на панели атрибутов и в появившемся всплывающем меню «NibName» выбрать имя кончика контроллера.

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

Это одна из тех сводящих с ума ошибок, которые с помощью Interface Builder так сложно отследить.

1 голос
/ 17 октября 2009

Eagle, при создании нового файла выберите значок «UIViewController subclass». Существует флажок, чтобы сделать его подклассом UITableViewController чуть выше флажка для включения файла XIB.

0 голосов
/ 08 октября 2009

Вместо того, чтобы делать все это, я бы использовал шаблон пользовательского интерфейса iPhone «Новый файл» для создания TableViewController с проверенной опцией файла xib. Затем вы получаете контроллер и xib-файл, все правильно соединенные вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...