File’s Owner и First Responder в Interface Builder Editor

В Xcode 4 были объединены Project Builder и Interface Builder.

universal app - это приложение которое может работать на iPad, iPhone (то что работает на iPhone также может запускаться на iPod touch). Достигается это наличием интерфейсов и контроллеров для двух сред. Выбор делается следующим образом:
[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone


Есть еще константа UIUserInterfaceIdiomPad.


В Xcode 4.2 появились storyboards. Прежняя структура файлов интерфейса, представлений, и контроллеров все еще поддерживается. storyboards упрощают разработку универсальных приложений. 

Каждое приложение на iOS имеет свой sandbox в котором хранит файлы в папках. Какие-то папки есть во всех приложения, но можно создавать еще и свои. Сам sandbox расположен в папке Library (расположена в пользовательской папке, есть еще аналогичная папка в корне диска, но в данном случае это не то). Папка Library в пользовательской папке скрыта, а в корне диска нет. Чтобы перейти в папку Library, нужно в Finder нажать Переход и потом клавишу ⌥ Option key (Windows logo key, если вы на хакинтоше).


~/Library/Application Support/iPhone Simulator

Если использовать размещение по умолчанию для SQLite файла то он будет размещен в папке Documents.


Создание универсального Core Data приложения

1) Начните с Master Detail template for iOS (раньше назывался Split View-Controller template).

2) Установите device family в Universal, включите Core Data, выключите Storyboard и Unit Tests.

3) Запустите приложение.


Interface Builder Editor

nib - NeXT interface builder files.
xib - nib файлы в формате XML.



Placeholders

Placeholders (иногда их называют proxy objects) это объекты которые представлены в runtime для каждого nib файла. Первый, file’s owner, это объект управляющий nib файлом. Обычно это наследник UIViewController (iOS) или NSViewController (Mac OS); в document-based app, это обычно наследник UIDocument (iOS) или NSDocument (Mac OS).

Объект создается в runtime и когда нужно показать nib файл вызывается один из следующих методов:
На Mac OS:
- (id)initWithNibNamed:(NSString *)nibName bundle:(NSBundle *)bundle
На iOS:
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

На Mac OS, возвращается NSNib; на iOS возвращается UIViewController.
Все это означает что когда nib файл загружается в runtime некоторым объектом, то после загрузки File’s Owner указывает на этот объект.



Под объектом File’s Owner находится другой placeholder - First Responder. Ваше приложение получает сообщения на которые оно может реагировать. Сообщения могут генерироваться фреймворком или действиями пользователя. Некоторые сообщения обрабатываются фреймворками, а некоторые вашим кодом. Архитектура обмена сообщениями для Mac OS и for iOS основывается на chain of responders.

Когда происходит действие, сообщение посылается ближайшему объекту, например кнопке находящейся под указателем мыши. Если данный объект не отвечает на сообщение, то оно передается следующему ответчику в цепочке. Объект спереди цепочки является первым ответчиком. Цепочка ответчиков изменяется событиями - обычно в ответ на действия пользователя. Кнопка которая была первым ответчиком перед тем как вы переместили указатели мыши не будет в цепочке ответчиков после того как переместили указатели мыши или кликнули на другое окно.

first responder placeholder в Interface Builder editor фактически является списком всех действий, которые определены для всех объектов, которые могут становится первыми ответчиками.

The first responder placeholder in Interface Builder editor is actually a list of all the actions that are defined for all the objects that are allowed to become first responders.

Q. What are placeholders?
A. Placeholders are objects related to the nib file.
File’s Owner represents the owner of the nib file: This relationship is established at runtime.
First Responder is a placeholder that collects all the actions from any class that can become a first responder.
The File’s Owner placeholder is an object at runtime.
There is no First Responder object.