Как вызвать методы класса для пользовательского свойства делегата? - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть класс «MyCLController» со свойством «dataSource», который является делегатом источника данных для класса «MyCLController». Класс «MyCLController» обрабатывает события местоположения и т. Д., И этому классу нужно несколько методов для запроса и обновления нескольких таблиц sqlite DB. По этой причине я создал протокол «MyCLControlerDataSourceDelegate», который объявляет, какие методы должен реализовывать класс делегата источника данных:

@protocol MyCLControlerDataSourceDelegate <NSObject>

@required

+ (NSArray *)getAllRegions;
+ (void)saveVisitTimeForRegionID:(NSInteger);
-(void)someInstanceMethod;

@end

И вот объявление свойства делегата источника данных:

@property (nonatomic, assign) id <MyCLControlerDataSourceDelegate> dataSource;

После выделения / запуска моего «MyCLController» я связываю его свойство dataSource с объектом класса типа, который реализует протокол MyCLControlerDataSourceDelegate.

Я бы хотел, чтобы MyCLController был слабосвязанным, чтобы он не знал, какой тип свойства у класса "dataSource". Все хорошо, при вызове методов экземпляра, например:

[self.dataSource someInstanceMethod];

Но как насчет вызова методов класса? Я знаю, что методы класса должны называться [ClassName classMethod], но это сделает MyCLController менее независимым.

1 Ответ

0 голосов
/ 15 ноября 2011

Одним из решений будет вызов метода «класса» для объекта.Он получит имя класса объекта, а затем мы сможем вызвать его метод класса, например:

NSArray *allRegions = [[self.dataSource class] getAllRegions];
...