Как мне узнать, какие сообщения делегат может / должен реализовать? - PullRequest
1 голос
/ 16 мая 2011

В Objective-C / Какао, как мне найти сообщения, которые я могу реализовать в классе делегата?

Из того, что я прочитал в документации, класс будет позволять обрабатывать только некоторые выбранные сообщения через делегата, но до сих пор не мог найти список сообщений для класса.

Чтобы задать вопрос другим способом, если я создал делегат для NSApplication, какие сообщения доступны для обработки?

В документации для NSApplication указывается делегат

отвечает на определенные сообщения от имени NSApp.

Документация переходит на

NSApplication определяет более двадцати методов делегатов, которые предоставляют возможности для изменения определенных аспектов поведения приложения.

но, насколько я вижу, в нем не перечислены эти методы / сообщения, так как узнать, какие из них будут вызваны из моего делегата?

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Обычно предполагается, что делегат соответствует протоколу, объявленному для этой цели, например, NSApplicationDelegate . Если это неясно прописано, вы часто можете найти название соответствующего протокола, посмотрев на тип свойства delegate (в данном случае id<NSApplicationDelegate>). Вы можете проверить документацию для получения подробной информации о методах или объявление @protocol в соответствующем заголовочном файле, чтобы узнать, какие методы доступны, а какие являются обязательными или необязательными.

В некоторых случаях объект не определяет протокол для своего делегата, например NSURLConnection . В этом случае вам просто нужно следовать документации класса относительно того, что он ожидает от своего делегата.

В любом случае это полностью зависит от класса, когда он отправляет сообщение делегату, и какова семантика любого сообщения.

1 голос
/ 16 мая 2011

Одно быстрое замечание: полезно понимать разницу между формальными и неформальными протоколами. Также формальные протоколы имеют дополнительные методы, которые не нужно вызывать. Когда вы пишете свой собственный протокол, вы должны проверить -respondsToSelector: перед отправкой необязательных / неофициальных методов.

формальные протоколы определены как ...

@protocol SomeProtocol <NSObject>
-(void)someMethod:(id)sender;
-(void)someOtherMethod:(NSString*)aString;
@property(nonatomic,retain) someProperty;

@optional
-(BOOL)someOptionalMethod;

@end

и принимаются как ...

@interface SomeClass : NSObject <SomeProtocol> {

}
@end

это говорит компилятору о том, что вы принимаете SomeProtocol, и вам не нужно объявлять ваши методы для протокола в файле .h, он также сообщает компилятору, что вы предупредили вас, если вы не реализовали все необходимые методы .

для неформальных протоколов вы не принимаете их синтаксически, но вам нужно будет объявить ваши методы в .h файле.

1 голос
/ 16 мая 2011

Эти методы описаны в документации NSApplicationDelegate:

http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSApplicationDelegate_Protocol/Reference/Reference.html

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