Какой недостающий шаг / информация в этом уроке iPhone Interface Builder?
-
07-07-2019 - |
Вопрос
Я следую учебному пособию по использованию Interface Builder из главы 2 «Разработка приложений iPhone SDK» Здзярского. " Идея состоит в том, чтобы создать очень простое приложение, которое состоит из контроллера панели вкладок, у которого есть две кнопки, каждая из которых связана с различным объектом представления (и каждый объект представления в своем собственном соответствующем файле .xib). В итоге я получаю пустое окно и некоторый код, который значительно отличается от того, что в книге указано, что я должен иметь.
Я подозреваю, что пропущенный шаг, но указанные шаги разбросаны по главе экспликации, поэтому я не уверен на 100%, что я что-то не пропустил. Вот краткое изложение того, что шаги кажутся:
<Ол>На данный момент в книге сказано, что если я посмотрю на 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 автоматически справлялся с этим, я считаю, что пропущенный шаг - это Файл - > Написать файлы классов ; хотя это несколько сбивает с толку, и я постараюсь понять, что должно быть , а не полагаться исключительно на него.