Почему AppDelegate наследуется от UIResponder? - PullRequest
16 голосов
/ 01 августа 2011

Я заметил, что при создании нового проекта с шаблоном iPhone Master-Detail в Xcode 4.2 beta 4 он делает:

// AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

Почему AppDelegate наследуется от UIResponder вместо NSObject?

Ответы [ 6 ]

12 голосов
/ 24 июля 2013

С Преобразование в раскадровки Примечания к выпуску :

Примечание. В текущих шаблонах Xcode класс делегата приложения наследуется от UIResponder.Это сделано для того, чтобы экземпляр делегата мог участвовать в цепочке респондента и таким образом обрабатывать действия на уровне приложения.Если вы не использовали этот шаблон в существующем приложении, нет необходимости применять его для раскадровок.

3 голосов
/ 01 августа 2011

Проверьте документацию UIResponder.Поскольку AppDelegate может реагировать на сенсорные события, он реализует интерфейс UIResponder.

2 голосов
/ 24 июля 2013

UIResponder - базовый класс для инфраструктуры UIKit. UIResponder может иметь дело с событиями.

Ваш класс AppDelegate является классом делегата для UIApplication, который UIApplicationMain создает. AppDelegate соответствует протоколу UIApplicationDelegate.

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

1 голос
/ 24 июля 2013

AppDelegate наследуется от UIResponder, который обрабатывает события iOS.Класс UIResponder определяет интерфейс для объектов, которые отвечают на события и обрабатывают их.

1 голос
/ 11 января 2012

Полагаю, это так, что у него есть доступ к глобальному менеджеру отмены действий.

0 голосов
/ 01 августа 2011

ОБНОВЛЕНИЕ: мой ответ ниже может быть неправильным.Я просто шел по изображению в документации iOS.Но, это должно быть устаревшим.

Если в iOS 5 нет чего-то нового и еще не задокументировано, то я думаю, что это опечатка с этим шаблоном Xcode 4.2 beta 4.В приложении iOS делегат приложения должен иметь подкласс NSObject, а не UIResponder, например:

@interface AppDelegate : NSObject <UIApplicationDelegate>

Для приложений iOS, в UIKit (для Cocoa Touch, например, iPhone и iPad), UIApplication - последний респондент в цепочке респондентов .

Для приложений Mac OS X, в наборе приложений (для какао, например, Mac) делегат приложения является последнимреспондент в цепочке респондентов .

...