Какой недостающий шаг / информация в этом уроке iPhone Interface Builder?

StackOverflow https://stackoverflow.com/questions/1424671

Вопрос

Я следую учебному пособию по использованию Interface Builder из главы 2 «Разработка приложений iPhone SDK» Здзярского. " Идея состоит в том, чтобы создать очень простое приложение, которое состоит из контроллера панели вкладок, у которого есть две кнопки, каждая из которых связана с различным объектом представления (и каждый объект представления в своем собственном соответствующем файле .xib). В итоге я получаю пустое окно и некоторый код, который значительно отличается от того, что в книге указано, что я должен иметь.

Я подозреваю, что пропущенный шаг, но указанные шаги разбросаны по главе экспликации, поэтому я не уверен на 100%, что я что-то не пропустил. Вот краткое изложение того, что шаги кажутся:

<Ол>
  • Создать новое " оконное приложение " named " Пример.
  • Откройте MainWindow.xib в Интерфейсном Разработчике и сделайте следующее: а) Выберите " Окно " Значок в окне документа, открыть инспектор, установить различные посторонние свойства. b) Перетащите «Контроллер панели вкладок». в окно документа. c) Измените названия двух вкладок на «Последние». и " История. " г) Сохранить MainWindow.xib
  • Создайте новый " Какао Touch View " Шаблон IB. Добавить " просмотр таблицы " к этому. Сохраните его как Recents.xib.
  • Аналогичным образом создайте еще один "Cocoa Touch View" " Шаблон IB. Добавить " текстовое представление " сохранить его как History.xib.
  • Вернитесь в MainWindow.xib, отредактируйте каждую из вкладок в контроллере панели вкладок в Инспекторе так, чтобы " Nib Name " соответствует соответствующему файлу .xib, созданному на шаге 3 (для последних) и шаге 4 (для истории).
  • Добавьте Recents.xib и History.xib в проект " Пример.
  • На данный момент в книге сказано, что если я посмотрю на ExampleAppDelegate.h, я должен увидеть ссылки на объекты Interface Builder в моем коде, например:

    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet RootViewController *viewController;
    

    Когда я на самом деле смотрю на файл, я вижу только первую (UIWindow) строку выше. Линия RootViewController отсутствует.

    Точно так же в книге сказано, что когда я загляну внутрь ExampleAppDelegate.m, я должен увидеть некоторые директивы синтеза:

    @synthesize window;
    @synthesize viewController;
    

    Но опять же, я вижу только строку, относящуюся к окну.

    И, разумеется, если я нажму "Build and Go", quot; то, что я вижу в симуляторе, это пустое окно.

    Одна из вещей, которые я заметил при прохождении этого процесса, заключалась в том, что мне не было приказано перетащить контроллер панели вкладок из шага 2b непосредственно в отображаемый объект Window в конструкторе интерфейса. В любом случае я попытался сделать это и обнаружил, что мне не разрешено (и на самом деле, контроллеры любого вида не приветствуются непосредственно в окне). Это показалось мне странным - я заметил, что перетаскивание объекта View в окно выглядит нормально. Но так как представления не могут содержать контроллеры вида, я не могу понять, как вы когда-либо предполагали добавить контроллер вида внутри иерархии, содержащейся в окне.

    Какие шаги и / или знания мне здесь не хватает?

    Это было полезно?

    Решение

    Выходы window и viewController добавляются как часть шаблона проекта, поэтому, возможно, шаблоны XCode изменились по сравнению с тем, когда было написано руководство. В XCode теперь есть отдельные шаблоны для панели вкладок, навигации и приложений, основанных на представлении, так что вам стоит взглянуть на них.

    В простом шаблоне приложения на основе Windows вам нужно добавить выход rootViewController в заголовочный файл AppDelegate и подключить его к экземпляру контроллера представления в IB. Представителю вашего приложения также потребуется код, чтобы добавить ваш основной вид в окно:

    - (void)applicationDidFinishLaunching:(UIApplication *)application {
    
        // Add the tab bar controller's current view as a subview of the window
        [window addSubview:rootViewController.view]; 
    }
    

    Вот как ваш основной контроллер вида связан с окном вашего приложения. Без этого кода вы увидите только пустое окно.

    Другие советы

    Если его там нет, просто запишите его - в этом нет никакой магии. Однако, если вы хотите, чтобы IB автоматически справлялся с этим, я считаю, что пропущенный шаг - это Файл - > Написать файлы классов ; хотя это несколько сбивает с толку, и я постараюсь понять, что должно быть , а не полагаться исключительно на него.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top