Я ищу хороший образец для такой ситуации. Давайте будем иметь класс с делегатом:Как реализовать два делегата одного типа в одном классе?
@protocol MyDelegate
-(void) someEvent;
@end
@interface MyServiceClass
@property (nonatomic,weak) id<MyDelegate> delegate;
@end
И у нас есть два экземпляра этого класса. Например, serviceObject1 и serviceObject2. Теперь в нашем контроллере мы хотим получать события от обоих случаях:
-(void) registerDelegates {
serviceObject1.delegate=self;
serviceObject2.delegate=self;
}
-(void) someEvent {
// do something
}
Все хорошо, за исключением, что события обоих случаях будут выброшены на один метод someEvent. Для меня будет удобнее отделять события от serviceClass1 и serviceClass2 до разных методов.
Я видел три подхода, но не нравится ни один из них:
- Отправить экземпляр звонящих в качестве аргумента someEvent и проверить, из которого экземпляра этого события и перенаправить к соответствующему методу.
- Создайте два поддельных объекта в моем контроллере и зарегистрируйте их как делегаты service1Class. И из этих объектов вызывают разные методы в моем контроллере.
- Используйте анонимные блоки вместо делегатов. Хорошее решение, но я не знаю, как их отменить.
Возможно, существует другое решение, которое я пропустил?
Возможно. Вы недовольны вариантом 1? Выглядит хорошо. –
Отправить экземпляр вызывающего абонента - это правильный способ сделать. Вот как это делает Apple, например 'tableView: cellForRowAtIndexPath:'. – kientux