Подтвердить что ты не робот

IOS: что эквивалентно прослушивателю событий в Objective-C?

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

4b9b3361

Ответ 1

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

или блокирует более продвинутый руководство по базовым блокам

только начинайте с делегатов,

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

Ответ 2

Принадлежа к миру С#, мне нужно перейти к объекту c (для моей работы). Я думаю, что эквивалент события в объективе 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 или в построителе интерфейса, вы должны связать делегата экземпляра объекта с тем, чтобы прослушивать себя своего класса, который прослушивает.

В коде

-(void)awakeFromNib
{
    myObjToListen.delegate = self;    
}
  • В интерфейсе Builder → IBOutlet от делегата к вашему классу прослушивания.

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

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

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

Ответ 3

Вы ищете KVO-ключ/значение наблюдения:

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

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

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

Ответ 4

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