MVC в IOS: может ли Model иметь Delegate к контролеру?

062a.png
Как мы видим, на картинке View может иметь Delegate и DataSource к контролеру.
И у меня возник вопрос, может ли Model иметь Delegate к контролеру?
  • Вопрос задан
  • 2975 просмотров
Решения вопроса 1
morozovdenis
@morozovdenis
Любому объекту вы можете присваивать в делегат любой другой объект, это не нарушает ни какие другие паттерны и т.п.

//файл A.h

@protocol ADelegate <NSObject>

- (void)aDelegateMethod;

@end

@interface A : NSObject

@property (nonatomic, weak) id<ADelegate> delegate;
/*
Описывая делегат таким образом мы скрываем объект за протоколом ADelegate.
В вашем случае модель не будет знать что у неё делегат это контроллер, модель будет
думать что там есть некий объект который отвечает на ADelegate протокол и кто там конкретно не важно
*/

@end


//файл B.h

#import "A.h"

@interface B : NSObject <ADelegate>

@end


//файл B.m

@implementation B

- (void)foo
{
    A *a = [A new];
    a.delegate = self;
}

#pragma mark - ADelegate Protocol
- (void)aDelegateMethod
{
}

@end
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
alexyat
@alexyat
iOS Developer
Может, можете написать все что душе угодно. Только на картинке что вы запостили, там написано в Model - KVO & Notification, и лучше использовать их при обновлении данных в модели, т.к. обычно об обновлении данных нужно узнать нескольким Controller, сделать это проще через notification, а Key-Value Observing нужно когда один контроллер следит за какой-то переменной.
Ответ написан
Комментировать
@SevaUA
Обычно у Контроллера есть прямой доступ к Модели. Или Вы о чем?
Ответ написан
Комментировать
firmach
@firmach
Как пример - CLLocationManager и его delegate. Если я правильно понял вопрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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