Вопрос по ios5, ios, objective-c – iOS: что эквивалентно слушателю событий в Objective-C?

18

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

Взгляни наthis document от Apple. dasblinkenlight

Ваш Ответ

5   ответов
12

Я думаю, что эквивалент события в цели c - это реализация:

Создайте протокол со всеми методами вашего мероприятия:

@protocol MyDelegate <NSObject>
    - (void)myEvent;
@end

В вашем классе, который должен отправить событие, добавьте:

@interface MyClassWichSendEvent : NSObject

@property (nonatomic, retain) IBOutlet id<MyDelegate> delegate;

@end

Поднятие события, где вы хотите, например:

- (IBAction)testEvent:(NSButton*)sender
{
    [self.delegate myEvent];
}

Теперь в вашем классе слушателя вы должны слушать события, подобные этому:

Добавьте протокол к вашему классу, который слушает

@interface Document : NSDocument<MyDelegate>

В реализации, в init или в конструкторе интерфейсов, вы должны связать делегат вашего экземпляра объекта, чтобы прослушивать self вашего класса, который слушает.

В коде

-(void)awakeFromNib
{
    myObjToListen.delegate = self;    
}
In Interface Builder -> IBOutlet from delegate to your listen's class.

И наконец, реализуйте свой метод в своем классе слушателя:

- (void)myEvent
{
    NSLog(@"i have listen this event !");
}

Извините за мой английский, я надеюсь, что помочь людям, которые пошли с Java или C #.

Что я не понимаю, как вы называете myEvent для идентификатора? Потому что я вижу, что делегатом является идентификатор IBOutlet & lt; MyDelegate & gt ;. Можете ли вы объяснить немного подробнее? Спасибо
8

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/

Делегаты + уведомления хороши для связи между объектами, но они не отправляют сообщения автоматически при изменении значения (что из вашего вопроса, это то, о чем вы спрашиваете)

0

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

0

Цель C используетделегаты

Этот пост имеет хороший пример:Как мне создать делегатов в Objective-C?

19

учебник для делегатов

или блоки более продвинутые основные блоки учебник

просто начните с делегатов,

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

первая ссылка не работает
Неработающая ссылка, должна бытьtutorialspoint.com/ios/ios_delegates.htm (завершающий "/" должен быть удален)
@IspasClaudiu обновил спасибо
Я полагаю, что то, что я прочитал, было об NSNotification, причина, по которой я склонялся к этому, - то, что я хочу, чтобы Модель не знала или не заботилась о том, что слушала. Когда я реализовывал делегаты в других местах, мне нужно было знать о делегате, чтобы я мог вызвать для него определенный метод. В этом случае я хочу, чтобы модель просто транслировала, что она закончена, так что какой бы вид ни слушал, он может действовать любым подходящим для этого вида видом. Jhorra

Похожие вопросы